c++ - 我应该如何包含 C++ 类?
问题描述
我想在另一个项目中包含一个项目中的一个类。
我有一个 subdirs 项目,其中包含两个子项目,一个 windows qt 控制台应用程序和一个用于测试控制台应用程序的自动测试项目。我的控制台应用程序包含一个类,我想将其拉入我的单元测试进行测试:
这是标题:
// calculator.h:
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Calculator{
private:
public:
Calculator(int year);
int getYear(){ return 666; }
int getMonth();
int getDay();
};
#endif
这是来源:
// calculate.cpp
"#include "calculator.h"
Calculator::Calculator(int year){}
int Calculator::getMonth(){
return 42;
}
int Calculator::getDay(){
return 3333;
}
这是我的单元测试的外观:
//tst_foobar.cpp
#include <QtTest>
//#include "../Calculator/calculator.h"
#include "../Calculator/calculator.cpp"
// add necessary includes here
class Foobar : public QObject
{
Q_OBJECT
private slots:
void test_case1();
};
void Foobar::test_case1()
{
Calculator myCalc(42);
}
QTEST_APPLESS_MAIN(Foobar)
#include "tst_foobar.moc"
我的问题是当我像这样包含另一个子目录的头文件时:#include "../Calculator/calculator.h"
它不能正常工作。我无法测试calculator.cpp
. 我可以像这样明确地包含calculate.cpp,#include "../Calculator/calculator.cpp"
并且我的测试按预期工作,但这是正确的方法吗?
我从来没有见过.cpp
像这样的文件中包含的文件,只有标题?但如果只包含标题,标题不包含函数定义calculator.cpp
?我的头文件应该包含该.cpp
文件吗?这样我就可以只在其他文件中包含标题,就像你在 C++ 中经常看到的那样。那么为什么 QT Creator 生成的类会反其道而行之呢?创建一个头文件和一个.cpp文件,.cpp文件是包含头文件的那个??
对 C++ 编程非常陌生,有点困惑。非常感谢详细的帮助。
解决方案
一旦您使用 CMake,您的问题就会得到解答,因此这可能会有所帮助。
查找头文件和 cpp 文件的所有无聊部分都在 CMakeLists.txt 文件中完成。然后在您使用时会创建一个可执行文件add_executable()
请注意,您可能会创建一个“干净”的构建目录。
我认为您的 CMakeLists.txt 文件将类似于
cmake_minimum_required(VERSION 2.8.11)
project(your_project_name)
enable_testing()
# Tell CMake to run moc when necessary:
set(CMAKE_AUTOMOC ON)
# As moc files are generated in the binary dir, tell CMake
# to always look for includes there:
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Test REQUIRED)
add_executable(foo your_test.cpp your_src.cpp)
add_test(foo foo)
target_link_libraries(foo Qt5::Test)
推荐阅读
- flutter - 错误 [Get] 检测到 GetX 使用不当。使用底部导航栏
- android - Android Camera Intent 仅返回横向图像
- sql - 需要加入 3 个表并返回每个人都超过 75 岁的结果
- c - 我可以将内联函数编译为共享库,并使用 LD_PRELOAD 作为内联函数连接到其他可执行文件吗?
- c - 内存中的位域填充和布局
- html - StencilJS - 为什么某些样式(例如,背景颜色)在设置容器样式时适用于所有元素?
- javascript - 比较数组并在值不同时更改
- c - 一些内存管理问题:Error AddressSanitizer
- json - 我从服务器收到奇怪或加密的 Json 格式
- google-cloud-datastore - 如何查找 Google Datastore 中未使用的类型