2010-01-15 10 views
0
class A 
{ 
public: 
    virtual void 
     doSomething(void) 
    {} 

    void 
     doStuff(void) 
    { 
     doSomething(); 
    } 
}; 

class B : public A 
{ 
public: 
    void 
     doSomething(void) 
    { 
     // do some stuff here 
    } 
}; 

B * b = new B; 
b->doStuff(); 

Это дает мне ошибку сегментации. Что я делаю не так? На мой взгляд, это должно хорошо работать!Вызов виртуального метода подкласса из метода базового класса

ответ

1

Насколько я могу судить, вы не делаете никакого полиморфизма в коде ниже определения класса.

b->doStuff() следует назвать метод класса B. Если вы хотите внутри B позвонить A-> doSomething вы можете использовать A:: doSomething

+0

B не имеет члена doStuff - так будет вызываться A :: doStuff. – 2010-01-15 12:42:36

+0

Он вызывает неполиморфный 'doStuff', реализация которого вызывает полиморфное' doSomething'. – ChrisW

+0

Я вызываю 'doStuff()', который объявлен в классе 'B' и вызывается из класса' A'. – kjagiello

0

Вы не должны иметь : после class A и public A ...

+0

Мой плохой. Но это все равно не проблема. – kjagiello

5

После того как я исправил ошибки синтаксиса и добавил основную функцию(), он компилируется и выполняется для меня без каких-либо проблем. Попробуйте отправить код REAL, который вызывает проблему, и переосмыслите форматирование кода.

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