私は私の手に謎を持っています。私は C# のバックグラウンドからマネージ C++ を学ぼうとしていますが、問題が発生しました。基本クラスSoupと、静的ライブラリ (.lib) としてコンパイルする派生クラスTomatoSoupの 2 つのクラスを含むプロジェクトがある場合、 Soupの仮想メソッドで未解決のトークンを取得します。コードは次のとおりです。
Abstracts.proj
スープ.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;
};
}
トマトスープ.cpp
#include "TomatoSoup.h"
void Abstracts::TomatoSoup::heat(int Degrees)
{
System::Console::WriteLine("Soup's on.");
}
Main.proj
メイン.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){}
エラーとして扱われる参照されていない仮パラメーターの警告を取得します。
- Soup クラスの abstract キーワードの有無にかかわらず、1 と 2 の両方を試しました
この問題は私を夢中にさせており、将来、他の開発者を狂わせないようにしたいと思っています。
更新: TomatoSoup::heat がヘッダー ファイルに実装されている場合、これは Greg Hewgill の引数名コメント メソッドで機能しましたが、実装を TomatoSoup.cpp に移動するとエラーが再発しました。それを反映するように質問を修正しました。