我试图用内联成员函数编写和使用一个类。但是,在构建项目时,链接器抱怨它找不到这些功能的符号。我创建了一个最小的示例来重现此错误。有两个源文件和一个头文件,其内容如下。
class.h:
class Class {
public:
void someOperation();
};
class.cpp:
#include <iostream>
#include "class.h"
inline void Class::someOperation() {
std::cout << "Hello from the class!" << std::endl;
}
main.cpp:
#include "class.h"
int main() {
Class aClass;
aClass.someOperation();
return 0;
}
我正在使用CMake构建。我的CMakeLists.txt看起来像这样:
cmake_minimum_required(VERSION 3.12)
project(test)
set(CMAKE_CXX_STANDARD 14)
add_executable(test main.cpp class.cpp)
所有这些文件都位于一个目录中。
当我尝试构建项目时,我得到以下输出:
/bin/cmake --build /Users/daniel/test/bin --target test -- -j 4
Scanning dependencies of target test
[ 66%] Building CXX object CMakeFiles/test.dir/class.cpp.o
[ 66%] Building CXX object CMakeFiles/test.dir/main.cpp.o
[100%] Linking CXX executable test
Undefined symbols for architecture x86_64:
"Class::someOperation()", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [test] Error 1
make[2]: *** [CMakeFiles/test.dir/all] Error 2
make[1]: *** [CMakeFiles/test.dir/rule] Error 2
make: *** [test] Error 2
但是,如果我从class.cpp中删除inline
,则项目将成功构建。谁能告诉我为什么会出错,以及我可以做些什么来做这项工作?