Компилятор не находит методы из базового класса - PullRequest
1 голос
/ 17 июня 2010

У меня проблема с моими виртуальными методами в производном классе.Вот мои (упрощенные) классы C ++.

class Base
   virtual method accept( MyVisitor1* v ) { /*implementation is here*/ };
   virtual method accept( MyVisitor2* v ) { /*implementation is here*/ };
   virtual method accept( MyVisitor3* v ) { /*implementation is here*/ };

class DerivedClass
   virtual method accept( MyVisitor2* v ) { /*implementation is here*/ };

При следующем использовании VS 2005 выдаст: «ошибка C2664:« DerivedClass :: accept »: невозможно преобразовать параметр 1 из« Visitor1 * »в« Visitor2 »* '».

DerivedClass c;
MyVisitor1 v1;
c.accept(v1);

Я ожидал, что компилятор найдет и вызовет Base :: accept (MyVisitor1) для моего DerivedClass.Очевидно, это не работает, но я не понимаю, почему.Есть идеи?

Спасибо,

Пол

1 Ответ

4 голосов
/ 17 июня 2010

Член accept в DerivedClass скрывает всех членов базового класса с одинаковыми именами, даже если они имеют разные подписи. Чтобы включить их, добавьте следующее к определению DerivedClass:

using Base::accept;

(я предполагаю, что DerivedClass происходит от Base; ваш фрагмент явно этого не говорит).

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