В настоящее время я работаю над проектом на C++, где у меня есть абстрактный интерфейс, который реализован позже. Интерфейс также имеет реализованный метод, который моя реализация не отменяет. Моя проблема заключается в том, что при использовании моей реализации компилятор (MSVC) не видит метод интерфейса. Что вызывает это, и как я могу его решить?виртуальный метод, не замеченный в реализации
Приходит код.
#include <string>
#include <vector>
using std::string;
class A
{
public:
string name;
};
class interface
{
public:
virtual int num_foo() = 0;
virtual A* foo(int) = 0;
virtual A* foo(string &name){
for (int i(0); i < num_foo(); i++)
if (foo(i)->name == name)
return foo(i);
return 0;
}
};
class implementation : public interface
{
public:
virtual int num_foo() { return m_foos.size(); }
virtual A* foo(int i) {
//check range
return &m_foos[i];
}
std::vector<A> m_foos;
};
int main(...)
{
implementation impl;
// impl is properly initialized here
string name("bar");
// here comes my problem, the MSVC compiler doesn't see foo(string &name)
// and gives an error
A *a = impl.foo(name);
}
Я вставил свой код в мой редактор, чтобы взглянуть на него, но я отказался от него после того, как я установил половину десяток ошибок, и он до сих пор не компилируется. Трудно ли предоставить код, в котором есть только одна проблема, о которой вы спрашиваете? Как бы то ни было, я не вижу, какие из десятков ошибок вы жалуетесь. Исправьте свой код. – sbi
извините за плохой код. теперь я исправил ошибки, и теперь моя проблема присутствует. –