我对下面的 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.cpp Ah --> 编译正常
g++ B.cpp --> 对 main 的未定义引用
我对下面的 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.cpp Ah --> 编译正常
g++ B.cpp --> 对 main 的未定义引用
你需要做:
g++ A.cpp -c
g++ B.cpp -c
生成 Ao 和 Bo(没有-c
g++ 期望链接并生成一个完整的可执行文件 - 并期望一个main
函数,而 -c 指定编译和汇编但不链接)。
然后,您可以使用以下方法将两个目标文件链接到可执行文件中:
g++ A.o B.o
另外:不要在命令行上指定头文件。您需要#include
在 cpp 文件中使用指令指定它们,然后编译器会将它们的内容直接拉入,作为编译每个 cpp 的预处理阶段。如果您对 C++ 编译阶段的详细信息感兴趣,Microsoft 在此处详细介绍了他们的编译器。