Понимание (просто?) Наследование C ++

Я немного пытаюсь понять, почему этот фрагмент кода не компилируется.

#include 

class A {
public:
    virtual int potential()=0;
    virtual int potential(int arg, int arg2)=0;
};

class B : public A {
public:
    int potential() { return 1; }
    virtual int potential(int arg, int arg2) { return 2; }
};

class C : public B {
public:
    int potential(int arg, int arg2) { return 3; }
};


int main(int argc, char** argv) {
    C c;
    int value = c.potential();
    printf("Got %i\n", value);
    return 0;
}

У меня есть два чистых виртуальных метода, оба названы потенциал в абстрактном суперклассе A . Подкласс B затем определяет оба, но следующий подкласс C должен только переопределить один из методов.

Однако при компиляции только метод, определенный в C распознается, а потенциал () не виден (это должно было быть унаследовано от B ):

In function 'int main(int, char**)':
Line 23: error: no matching function for call to 'C::potential()'
compilation terminated due to -Wfatal-errors.

Если я переименую A :: потенциал ( int, int) на что-то еще вниз по дереву наследования, например A :: somethingElse (int, int) , тогда код компилируется нормально, и на выходе получается Получено 1 , как и ожидалось.

Это было проверено с помощью clang , Windows 7 Eclipse для разработчиков PHP Версия: Helios Service Release 2 На гостевой машине: Linux debian squeeze Я хочу отредактировать свой удаленный проект через SSH в Eclipse с помощью ...

Что такое:

На хост-машине:
Windows 7 Eclipse для разработчиков PHP
Версия: Helios Service Release 2

На гостевой машине: Linux debian squeeze

Я хочу редактировать свой удаленный проект через SSH в Eclipse с помощью RSE. Все в порядке, я делаю это в перспективе Remote System Explorer:

screenshot1

Затем я перехожу в перспективу PHP. Щелкните правой кнопкой мыши проект-> Настроить-> Добавить поддержку PHP. И нажмите Ctrl + Shift + Пробел или Ctrl + Пробел . Нет доступных дополнений (помощь кода).

screenshot2

Хорошо, я нашел эту ошибку (в 2008 году) и описание решения (в 2009 году): Ошибка 251496 . Я так и сделал:

Вот мое решение проблемы: Я только что удалил проект RemoteSystemsTempFiles в представлении PHPExplorer и чем воссоздал его как проект PHP (New-> PHP Project, конечно, он должен быть снова названный RemoteSystemsTempFiles). Это сработало для меня, теперь завершение кода хорошо, надеюсь, это поможет.

screenshot3

Это не решает проблему. Поскольку в библиотеке PHP Language нет Core API, возможно ... Помогите. Спасибо.

5
задан Dmitry Ponomarev 13 May 2011 в 11:57
поделиться