以下のC++クラス構造と混同しています。
A.h:
class A{
};
A.cpp
//implementation for A
void A::someMethod();
B.cpp:
#include "A.h"
B : public A{
//stuff for B
};
int main{
B b();
b.someMethod();
}
g ++A.cppAh->正常にコンパイルされます
g++B.cpp->メインへの未定義の参照
以下のC++クラス構造と混同しています。
A.h:
class A{
};
A.cpp
//implementation for A
void A::someMethod();
B.cpp:
#include "A.h"
B : public A{
//stuff for B
};
int main{
B b();
b.someMethod();
}
g ++A.cppAh->正常にコンパイルされます
g++B.cpp->メインへの未定義の参照
あなたがする必要があります:
g++ A.cpp -c
g++ B.cpp -c
Ao と Bo を生成するには ( -c
g++ なしでは、完全な実行可能ファイルをリンクして生成することを期待し、main
関数を期待しますが、-c はコンパイルとアセンブルを指定しますが、リンクはしません)。
次に、次を使用して、2 つのオブジェクト ファイルを実行可能ファイルにリンクできます。
g++ A.o B.o
また、コマンド ラインでヘッダー ファイルを指定しないでください。cpp ファイルでディレクティブを使用してそれらを指定する必要があります#include
。その後、コンパイラは、各 cpp をコンパイルする前処理段階として、その内容を直接取り込みます。C++ のコンパイル段階の詳細に興味がある場合は、Microsoft がコンパイラの詳細をここで説明しています。