Базовый класс не определен? - PullRequest
1 голос
/ 16 ноября 2011

Я уже видел сообщение об ошибке, но это то, что отличается. Поэтому, пожалуйста, не закрывайте это. У меня есть класс интерфейса, и у меня есть класс, который наследует класс интерфейса и переопределяет методы в классе интерфейса. Код выглядит так

//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. И я использую методы и классы в DLL из exe. Этот exe-файл содержит некоторые классы. Эти классы снова наследуют тот же файл интерфейса и также используют method1 () . Поэтому для использования method1 () я включаю b.h в свой файл. Если порядок моих операторов включения - Interface.h и b.h, то я получаю ошибку компилятора для exe. Говорит " базовый класс не определен ". Но если я изменим порядок включения оператора, то ошибки компиляции не будет. Кто-нибудь может мне подсказать, что может быть основной причиной этой проблемы.

Ответы [ 3 ]

1 голос
/ 16 ноября 2011

На самом деле в вашем примере кода есть две ошибки: во-первых, вы не объявляете метод без возвращаемого типа, что является ошибкой. Во-вторых, вы, по крайней мере в приведенном выше фрагменте, не объявляете method1 в определении класса B:

class B : public A
{
    virtual void method1();
};
0 голосов
/ 16 ноября 2011

Если ваш интерфейс IA и объявлен в IA.h , убедитесь, что каждый класс Foo , который наследуется от IA будь то в EXE или DLL включает IA.h до определения класса в Foo.h

То, что я подозреваю, происходит, что это не так и основанов заголовке укажите порядок, в котором вы можете получить определение IA в некоторых файлах, а не в других

0 голосов
/ 16 ноября 2011

Вам абсолютно необходимо объявить виртуальный метод "method1 ()" в определении классов A и B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...