我试图将具有定义的类的头文件和具有该类实际功能的.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/

10-10 18:12
查看更多