簡體   English   中英

對C ++ #include感到困惑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM