У меня на руках загадка. Я пытаюсь изучить управляемый C ++, исходящий из C # фона и столкнулся с загадкой. Если у меня есть проект, который включает два класса, базовый класс Суп и производный класс TomatoSoup , который я собираю как статическую библиотеку (.lib), я получаю неразрешенные токены в виртуальной методы в суп . Вот код:
Abstracts.proj
Soup.h
namespace Abstracts
{
public ref class Soup abstract
{
public:
virtual void heat(int Degrees);
};
}
TomatoSoup.h
#include "Soup.h"
namespace Abstracts
{
public ref class TomatoSoup : Abstracts::Soup
{
public:
virtual void heat(int Degrees) override;
};
}
TomatoSoup.cpp
#include "TomatoSoup.h"
void Abstracts::TomatoSoup::heat(int Degrees)
{
System::Console::WriteLine("Soup's on.");
}
Main.proj
main.cpp
#include "TomatoSoup.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Abstracts::TomatoSoup^ ts = gcnew Abstracts::TomatoSoup();
return 0;
}
Я получаю эту ошибку времени ссылки на Main.proj :
1>Main.obj : error LNK2020: unresolved token (06000001) Abstracts.Soup::heat
Я пытался установить
virtual void heat(int Degrees)=0;
Я пытался реализовать тепло в базовом классе
virtual void heat(int Degrees){}
и получите формальную ссылку без ссылки
предупреждение параметра рассматривается как
ошибка.
- Я пробовал 1 и 2 с и
без абстрактного ключевого слова на
Суп класс
Эта проблема сводит меня с ума, и я надеюсь помешать ей в будущем свести с ума других разработчиков.
ОБНОВЛЕНИЕ: Это работало с методом комментирования имени аргумента Грега Хьюджилла, когда TomatoSoup :: heat был реализован в заголовочном файле, но ошибка вернулась, когда я переместил реализацию в TomatoSoup.cpp. Я изменил вопрос, чтобы отразить это.