为什么C ++中的内联类成员函数会导致找不到符号错误?

时间:2018-11-29 14:41:33

标签: c++ cmake

我试图用内联成员函数编写和使用一个类。但是,在构建项目时,链接器抱怨它找不到这些功能的符号。我创建了一个最小的示例来重现此错误。有两个源文件和一个头文件,其内容如下。

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,则项目将成功构建。谁能告诉我为什么会出错,以及我可以做些什么来做这项工作?

0 个答案:

没有答案