[英]Confused about #include for seperate directories in C++ using Unix
[英]Confused about C++ #include
我的項目具有以下文件夾結構:
Project/
--Classes/
----Class1.h
----Class1.cpp
--main.cpp
“ Class1.h”包含方法定義,“ Class1.cpp”是“ Class1.h”的源代碼。
“ Class1.h”的源代碼如下:
class Class1 {
public:
void do_something();
};
“ Class1.cpp”的源代碼如下:
#include "Class1.h"
void Class1::do_something() {
//
}
“ main.cpp”的源代碼如下:
#include "Classes/Class1.h"
int main(int argc,char** args) {
Class1* var = new Class1();
var->do_something();
return 0;
}
但是,在編譯“ main.cpp”時,編譯器不知道Class1中方法的實現在哪里,因此它顯示有關未定義引用的鏈接錯誤。
我是否必須在命令行中添加任何路徑,以便編譯器知道必須編譯哪些源文件? 如何告訴編譯器還必須編譯“ Class1.cpp”?
您需要將項目中的所有文件送入編譯器,而不僅僅是“ main.cpp”。 在這里,您可以了解與Gcc一起編譯乘法文件的基礎知識。
另一種選擇是將您的類編譯為動態或靜態庫,但是如果您不太熟悉庫,則應從簡單地將它們一起編譯開始。
正確的方法是將標頭包含在Class1.cpp
文件中。 這樣,如果將Class1.cpp編譯為庫,則可以使用頭文件來獲取聲明。
反之,如果您將直接使用Class1.cpp,則將其與您的項目一起編譯。 您應該在main.cpp中包括Class1.cpp
。
您需要了解有關構建(編譯和鏈接)C ++應用程序的知識。 這個主題通常不會在有關C ++的編程書籍中進行描述,而僅是實現該主題的唯一方法-谷歌和編程社區網站(含文章)。
快速的答案是:
g++ -c Classes/Class1.cpp -o Class1.o
g++ -c main.cpp -o main.o
g++ Class1.0 main.0 -o ProjectName
這是一組用於編譯和鏈接程序的簡單命令。 通常它將由構建系統(make,qmake,cmake,waf,scons,ant等)完成。 此外,IDE可以在不進行其他配置的情況下(例如Visual Studio)構建程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.