3

G++ でコンパイルするファイルが 3 つあります。メイン ファイルは次のようになります。

//main.cpp

#include "test.hpp"

int main(int argc,char** args) {
  //
}

2 番目のファイルはヘッダー ファイルです。

//test.hpp

namespace shared {
  class test {

    //constructor 
    test();
  };
}

最後のファイルは、test.hpp のコード ファイルです。

//test.cpp

shared::test::test() {
  //
}

そして、このように G++ を使用してコンパイルします。

g++ -c main.cpp test.cpp

ただし、G++ は、ファイル 'test.cpp' 内の未定義の識別子 'shared' について不平を言います。コマンド ラインでは、ヘッダー ファイルを含むファイル 'main.cpp' を既に渡しています。これを修正する方法は?すべての「#include」を main.cpp に配置したいだけで、それ以外の場所には配置したくありません。

4

2 に答える 2

3

#include "test.hpp"の先頭に追加しtest.cppます。

コンパイラは、コマンドライン内のファイルの順序を気にしません。リンカーにのみ影響します。また、複数ファイルのプロジェクトをコンパイルする通常の方法は、次のようにそれぞれを異なるサブオブジェクトにコンパイルすることです。

g++ main.cpp -o main.o
g++ test.cpp -o test.o
ld main.o test.o -o program[.exe]

これにより、実際に変更されたファイルのみを再コンパイルできます。しばらく考えてみると、.cppファイルに多くのヘッダーを問題なく含めることができることがわかります。ただし、ヘッダーに多くのヘッダーが含まれ始めると、コンパイル時間が長くなります。前方宣言はこれらの問題を解決するのに役立ちますが、単純な例では単純なソリューションが機能します。

于 2012-09-07T07:23:45.013 に答える
1

#include "test.hpp"あなたはあなたのtest.cppファイルに言わなければなりません。名前空間の宣言を知っている必要があります。

于 2012-09-07T07:24:15.260 に答える