我试图将具有定义的类的头文件和具有该类实际功能的.cpp文件链接到我的主cpp文件,但是出现此错误:
c++ DataMembers.cpp -o DataMembers
架构x86_64的 undefined symbol :
“Cat::eat()”,引用自:
_main在DataMembers-053507.o中
“Cat::meow()”,引用自:
_main在DataMembers-053507.o中
“Cat::sleep()”,引用自:
_main在DataMembers-053507.o中
ld:找不到架构x86_64的符号
铛:错误:链接器命令失败,退出代码为1(使用-v查看调用)
make:*** [DataMembers]错误1
请注意,所有文件都存在于同一目录中!
我的main.cpp代码是:
#include "Cat.h"
#include <iostream>
using namespace std;
int main()
{
Cat myCat;
myCat.eat();
myCat.meow();
myCat.sleep();
}
我的Cat.h代码:#ifndef CAT_H_
#define CAT_H_
class Cat
{
public:
void meow();
void sleep();
void eat();
};
#endif
Cat.cpp代码为:
#include <iostream>
#include "Cat.h"
using namespace std;
void Cat::meow()
{
cout << "Meowwwwww!" << endl;
return;
}
void Cat::sleep()
{
cout << "Zzz ... " << endl;
return;
}
void Cat::eat()
{
cout << "Num Nom Nom .. Yummy" << endl;
return;
}
有趣的是,当我从#inclue "Cat.h"
更改main.cpp中的头文件时到
#include "Cat.cpp"
中,程序编译没有任何问题!我只是不知道为什么?我已经找到了解决方案,但找不到任何解决方案!并且我需要能够使用自己创建的头文件!
预先感谢您的 friend !
最佳答案
编译时,请确保引用所有cpp
源文件,以便它可以生成相应的目标文件。
似乎您忘记了引用cat.cpp
。假设该类的实现在另一个cpp
文件中,则编译器会发现您包含头文件。因为您忘记了引用该文件,所以链接器会抱怨一些 undefined symbol 无法链接。
一旦将cat.cpp
直接包含在main.cpp
中,就可以将其所有内容基本上复制到此文件中,这意味着不再需要从另一个翻译单元链接实现。
简而言之:您需要告诉编译器有关cat.cpp
的信息
关于c++ - 无法在VScode(macOS)中将头文件链接到我的main.cpp(lang语错误),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64497651/