Вызов виртуального метода подкласса из метода базового класса - PullRequest
0 голосов
/ 15 января 2010
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();

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

Ответы [ 3 ]

5 голосов
/ 15 января 2010

После того, как я исправил синтаксические ошибки и добавил функцию main (), она скомпилирована и выполнена для меня без проблем. Попробуйте опубликовать РЕАЛЬНЫЙ код, который вызывает проблему, и переосмыслите форматирование кода.

1 голос
/ 15 января 2010

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

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

0 голосов
/ 15 января 2010

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

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