我有一个带有基类(MyClassA)的库(a.so)。另一个库(b.so)有一个MyClassB类,它继承自MyClassA(在a.so中)。我编译了a.so中隔离的MyClassA.h和MyClassA.cpp。 MyClassB.h和MyClassB.cpp是独立编译的(引用MyClassA.h但没有将MyClassA.h添加到b.so)。然后我将b.so链接到a.so。
总结:
当我尝试编译时,由于b.so而导致MyClassA出现一些引用错误。
当我编译b.so并将MyClass.h添加到它时,库编译并运行没有任何错误。因此:
在C ++中是否可以使用我的第一个选项,或者是否需要始终在子类库中包含基本头文件?
答案 0 :(得分:3)
如果您从ClassB
派生ClassA
,则应该在导出时ClassA
定义,而不仅仅是声明(< EM>引用)。这就是为什么你必须包含ClassA
头文件。
但是如果您在ClassA
文件中实现了cpp
个功能,而不是在标头中,ClassA
的实际代码将在a.so
中,那么,包含ClassA
头文件并不是真正的问题。
答案 1 :(得分:0)
所有派生类在编译时必须#include
基类声明。必须在链接时知道基类实现。
在你的情况下:
g ++ -o b.so -la
答案 2 :(得分:0)
如果class B
是从class A
派生的,则必须包含class A
头文件。