[英]Can't link header files to my main.cpp in VScode (macOS) (clang error)
我正在嘗試將其中定義了類的頭文件和具有該類實際功能的 .cpp 文件鏈接到我的主 cpp 文件,但出現此錯誤:
c++ DataMembers.cpp -o DataMembers 架構 x86_64 的未定義符號:“Cat::eat()”,引用自:DataMembers-053507.o 中的 _main.o “Cat::meow()”,引用自:DataMembers-053507 中的 _main。 o “Cat::sleep()”,引用自:DataMembers-053507.old 中的 _main:找不到 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"
,程序編譯沒有任何問題! 我只是不知道為什么?
我已經搜索了解決方案,但還沒有找到! 我需要能夠使用我自己創建的頭文件!
先謝謝各位朋友了!
編譯時確保引用所有cpp
源文件,以便它可以生成相應的目標文件。
你好像忘記引用cat.cpp
。 編譯器看到您包含一個頭文件,假設此類的實現將在另一個cpp
文件中。 因為您忘記引用該文件,鏈接器會抱怨某些未定義的符號無法鏈接。
一旦您將cat.cpp
直接包含到您的main.cpp
,您基本上將其所有內容復制到此文件中,這意味着不再需要從另一個翻譯單元鏈接實現。
簡而言之:你需要告訴你的編譯器關於cat.cpp
在 Cat.cpp 中你寫了 #include "cat.h" 但文件名是 "Cat.h" 所以你弄亂了大寫。
首先檢查您為哪個架構編寫了頭文件,如果它與主文件的架構相同,然后嘗試使用驅動器中的完整路徑,即使它不起作用,將您的頭文件路徑添加為附加包含目錄.
在 main.cpp 中試試這個
#include "Cat.cpp"
代替:
#include "Cat.h"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.