我已经看过一篇关于错误的文章,但这有些不同。所以请不要关闭这个。我有一个Interface类,我有一个继承接口类的类,并覆盖了Interface类中的方法。代码看起来像这样
//interface file
//Interface.h
class A
{
virtual method1();
};
//b.h
#include "Interface.h"
class B : public A
{
//declaration
}
//b.cxx
#include b.h
B::method1()
{
//definition
}
我在dll中导出所有这些类。我在exe中使用dll中的方法和类。这个exe再次包含一些类。这些类再次继承相同的接口文件,并使用 method1()。所以要使用 method1()我在我的文件中包含b.h。如果我的include语句的顺序是Interface.h和b.h,那么我得到exe的编译器错误。告诉“基类未定义”。但是,如果我重新排序Include语句,则没有编译错误。任何人都可以告诉我这个问题可能是什么原因。
答案 0 :(得分:1)
您的示例代码中实际上存在两个错误:首先,如果没有返回类型,则不会声明该方法,这是一个错误。第二个是,至少在上面的代码段中,您没有在method1
的类定义中声明B
:
class B : public A
{
virtual void method1();
};
答案 1 :(得分:0)
你绝对需要在A和B的类定义中声明虚方法“method1()”。
答案 2 :(得分:0)
如果您的界面是 IA 并在 IA.h 中声明,请确保从 IA继承的每个 Foo 类在exe或dll中包含 IA.h 之前 Foo.h
中的类定义我怀疑发生的情况并非如此,并且基于标题包含顺序,您可能会在某些文件中获得 IA 的定义而不是其他文件