我手上有一个谜。我正在尝试学习来自 C# 背景的托管 C++,但遇到了障碍。如果我的项目包含两个类,一个基类Soup和一个派生类TomatoSoup,我将其编译为静态库 (.lib),我会在Soup中的虚拟方法上获得未解析的标记。这是代码:
Abstracts.proj
汤.h
namespace Abstracts
{
public ref class Soup abstract
{
public:
virtual void heat(int Degrees);
};
}
番茄汤.h
#include "Soup.h"
namespace Abstracts
{
public ref class TomatoSoup : Abstracts::Soup
{
public:
virtual void heat(int Degrees) override;
};
}
番茄汤.cpp
#include "TomatoSoup.h"
void Abstracts::TomatoSoup::heat(int Degrees)
{
System::Console::WriteLine("Soup's on.");
}
主项目
主文件
#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){}
并将未引用的形式参数警告视为错误。
- 我已经在 Soup 类上尝试了 1 和 2 有和没有 abstract 关键字
这个问题让我发疯了,我希望能防止它在未来让其他开发人员发疯。
更新:当在头文件中实现 TomatoSoup::heat 时,这与 Greg Hewgill 的参数名称注释方法一起使用,但是当我将实现移动到 TomatoSoup.cpp 时错误又回来了。我已经修改了问题以反映这一点。