Неразрешенная ошибка внешнего символа интерфейса C ++

Хорошо, у меня есть простой вопрос, но буквально нет примеров того, что я ищу в Интернете, только копии одного и того же примера, который делает все в одном файле. Я пытаюсь создать интерфейс и метод для его использования, как в примере ниже, но я получаю неразрешенные внешние ошибки символов из 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;
}

0

Решение

В IFoo.h виртуальный метод должен быть чисто виртуальным:

class IFoo {
public:
virtual int Bar() = 0;
};

Альтернативно, предоставьте реализацию по умолчанию, либо встроенную, либо в IFoo.cpp. Однако это могло бы ввести в заблуждение префикс I, поскольку тогда он не работал бы как интерфейс.

0

Другие решения

Предполагая, что неразрешенный символ предназначен для int IFoo::Bar()обратите внимание, что эта функция объявлена ​​как вызываемая функция, и ее действительно можно вызвать, например, с помощью

p->IFoo::Bar()

То есть вам нужно либо определить эту функцию, либо объявить ее как не существующую:

virtual int Bar() = 0;

(который все еще позволяет вам определить это, хотя).

1

По вопросам рекламы [email protected]