0

私のプロジェクトには、次のフォルダー構造があります。

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」もコンパイルする必要があることをコンパイラに伝える方法は?

4

3 に答える 3

5

「main.cpp」だけでなく、プロジェクト内のすべてのファイルをコンパイラにフィードする必要があります。ここでは、Gcc を使用して乗算ファイルをコンパイルする基本について読むことができます。

別のオプションとして、クラスを動的または静的ライブラリとしてコンパイルすることもできますが、ライブラリに慣れていない場合は、クラスをまとめてコンパイルすることから始めてください。

于 2012-08-15T11:04:40.153 に答える
2

これを行う正しい方法は、Class1.cppファイルにヘッダーを含めることです。Class1.cpp がライブラリとしてコンパイルされている場合、ヘッダー ファイルを使用して宣言を取得できます。

逆に、Class1.cpp を直接使用する場合は、プロジェクトでコンパイルます。Class1.cppmain.cppに含める必要があります。

于 2012-08-15T11:03:39.393 に答える
2

C++ アプリケーションのビルド (コンパイルとリンク) について知っておく必要があります。このトピックは通常、C++ に関するプログラミングの本では説明されておらず、それを行う唯一の方法 - 記事のある Google およびプログラミング コミュニティ サイトです。

速い答えは次のとおりです。

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 などの追加構成なしでプログラムをビルドできます。

于 2012-08-15T11:11:42.133 に答える