c++ - 无法在 VScode (macOS) 中将头文件链接到我的 main.cpp(clang 错误)

标签 c++ visual-studio-code compiler-errors linker

我正在尝试将一个定义了一个类的头文件和一个具有该类实际功能的 .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 的符号
clang:错误:链接器命令失败,退出代码为 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;
}

有趣的是,当我将 main.cpp 中的头文件从 #inclue "Cat.h" 更改时
进入 #include "Cat.cpp"程序编译没有任何问题!我只是不知道为什么?
我已经搜索了一个解决方案,但还没有找到任何解决方案!我需要能够使用我自己创建的头文件!
先谢谢各位 friend 了!

最佳答案

编译时确保引用所有 cpp源文件,以便它可以生成相应的目标文件。
您好像忘记引用 cat.cpp .编译器看到你包含了一个头文件,假设这个类的实现将在另一个 cpp 中。文件。因为您忘记引用所述文件,链接器会提示无法链接某些 undefined symbol 。
一旦包含 cat.cpp直接进入您的main.cpp ,您基本上将其所有内容都复制到了这个文件中,这意味着不再需要从另一个翻译单元链接实现。
简而言之:你需要告诉你的编译器 cat.cpp

关于c++ - 无法在 VScode (macOS) 中将头文件链接到我的 main.cpp(clang 错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64497651/

相关文章:

c++ - 是否可以在 Windows 中获取触摸触点(位图)的物理形状?

c++ - 哪个 WinAPI 库最适合将文件上传到服务器

c++ - gcc 4.6 编译器的奇怪行为

c++ - Visual Studio Code - 远程调试 Bazel C++ - 无法读取文件'vscode-remote ://dev- file

xcode - Intel C++编译器,无法在OS X上打开stdarg.h

java - 尝试在 Jersey 2.27 中绑定(bind)工厂类时出现编译错误

python - C++:提取解析数学表达式的符号/变量

visual-studio-code - WSL2 终端无法识别 Visual Studio Code

typescript - 如何在 VS Code 中生成 TypeScript UML 类图?

java - 编译错误,找不到符号和构造函数不能应用于给定类型