Хорошо, у меня есть простой вопрос, но буквально нет примеров того, что я ищу в Интернете, только копии одного и того же примера, который делает все в одном файле. Я пытаюсь создать интерфейс и метод для его использования, как в примере ниже, но я получаю неразрешенные внешние ошибки символов из Visual Studio при компиляции. Есть идеи о том, что я делаю не так?
IFoo.h
class IFoo {
public:
virutal int Bar();
}
foo.h
class Foo : public IFoo {
virtual int Bar();
}
foo.cpp
int Foo::Bar() {
return 1;
}
В IFoo.h виртуальный метод должен быть чисто виртуальным:
class IFoo {
public:
virtual int Bar() = 0;
};
Альтернативно, предоставьте реализацию по умолчанию, либо встроенную, либо в IFoo.cpp. Однако это могло бы ввести в заблуждение префикс I, поскольку тогда он не работал бы как интерфейс.
Предполагая, что неразрешенный символ предназначен для int IFoo::Bar()
обратите внимание, что эта функция объявлена как вызываемая функция, и ее действительно можно вызвать, например, с помощью
p->IFoo::Bar()
То есть вам нужно либо определить эту функцию, либо объявить ее как не существующую:
virtual int Bar() = 0;
(который все еще позволяет вам определить это, хотя).