C ++: доступ к методу дедушки - PullRequest
3 голосов
/ 16 января 2011

Почему это не работает, и что было бы хорошей альтернативой?

class Grandparent
{
    void DoSomething( int number );
};

class Parent : Grandparent
{
};

class Child : Parent
{
    void DoSomething()
    {
        Grandparent::DoSomething( 10 ); // Does not work.
        Parent::DoSomething( 10 ); // Does not work.
    }
};

Ответы [ 2 ]

11 голосов
/ 16 января 2011
class Grandparent
{
protected:
    void DoSomething( int number );
};

class Parent : protected Grandparent
{
};

class Child : Parent
{
    void DoSomething()
    {
        Grandparent::DoSomething( 10 ); //Now it works
        Parent::DoSomething( 10 ); // Now it works.
    }
};

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

http://codepad.org/xRhc5ig4

Существует полный пример, который компилируется и запускается.

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

Я полагаю, что ваш код не скомпилирован - и основной источник ошибки отсутствовал спецификатор типа возврата для метода Child::DoSomething().

...