CMake项目编译出现:对‘XXXX’未定义的引用

发布时间 2023-04-13 17:12:23作者: 我与红红心意相通
  1. ‘XXXX’不是自己写的。说明是这个变量或者函数实现的文件未导入,先找到‘XXXX’属于哪个库,然后在CMakeList.txt中添加相应的静态库或者动态库。

  2. ‘XXXX’是自己写的。查看实现的源文件(.cpp)中和头文件(.h)中的定义是否一致,不一致就会出现此错误。或者查看CMakeList.txt中是否引入了相关的cpp文件。未引入的可以使用add_executable中引入,或者其他可以添加的方法。(一般在add_executable的括号中后面添加相应的cpp文件名就行,或者其他添加方法)

  3. ‘XXXX’是自己写的。并且在CMakeList.txt已经添加。那么看看是不是静态变量。静态变量必须在cpp中初始化。

//例子:
// .h文件中
class Bag{...};

class Student
{
public:
  static Bag* stu_no;
  bool GotoSchool();
  ...
};


//.cpp文件中

Bag* Student::stu_no = nullptr; //必须初始化静态成员。不初始化就会出现‘student::stu_no’未定义的引用。
bool Student::GotoSchool()
{
  //TODO
}