2013-10-07 3 views
1

Недавно я наткнулся на другую проблему на C++, которая дала мне довольно много времени. Предположим, что мы имеем небольшую программу:Указатели на виртуальные классы

class A { 
    public: 
    virtual bool c() = 0; 
    virtual bool b() = { return false; }; 
    virtual ~A() {} 
} 

class B : public A { 
    public: 
    bool b() = { return true; }; 
    ~B() {} 
} 

... 

void c(A *pointer) { 
    if (pointer->b()) { 
    cout << "Derived class"; 
    } 
} 

В этом случае компилятор возвращает ошибку на «если» линии метода с() с ошибкой «доступа к члену в неполном типа А». Может кто-нибудь объяснить мне, почему компилятор возвращает такую ​​ошибку? И если это действительно так, если вы стреляете в исключение, то как я могу его предотвратить?

Большое спасибо!

+2

Вы действительно пытаетесь скомпилировать код, который вы публикуете? В коде есть несколько синтаксических ошибок. И кстати: я скопировал ваш код и исправил простые ошибки. Все прекрасно компилируется. –

ответ

3

«Неполный тип A» означает, что в коде, который вы компилируете (но не в коде, который вы отправили), не существует определения A, прежде чем оно будет использоваться в c. Вам понадобится определение в том же исходном файле, что и c, или в заголовке, включенном в этот исходный файл.

+0

Действительно! Я просто понял, что забыл включить определение «А». Спасибо, в любом случае! – jrbn

Смежные вопросы