基类未定义?

时间:2011-11-16 06:26:22

标签: c++ dll interface

我已经看过一篇关于错误的文章,但这有些不同。所以请不要关闭这个。我有一个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语句,则没有编译错误。任何人都可以告诉我这个问题可能是什么原因。

3 个答案:

答案 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 的定义而不是其他文件