ある場所で構築され、他の場所に渡されていくつかの操作を実行する、テンプレート化されたクラスの階層があります。
たとえば、クラスを double に変換する方法を知っている複雑なオブジェクトにテンプレート化することができ、テンプレート化されたクラスには、このオブジェクトを double として出力する操作があります。ユーティリティ関数の例は、このクラスのコレクションをテーブルとして出力する関数です。
ただし、この型をテンプレート化されたクラスとして渡したくありません。ユーティリティ関数は、すべての具象クラスのバリアントで機能する必要があるためです。これらはすべて double として表現できるからです。したがって、「represent as double」機能を持つテンプレート化されていないインターフェースが必要です。以下が機能しないのはなぜですか?
#include "stdafx.h"
class Interface1
{
public:
virtual int ReturnSomeInt();
};
template<typename myType>
class TClass1 : public Interface1
{
public:
int ReturnSomeInt() {return 5;}
void CalculateSomething(myType myValue) {}
TClass1() {}
};
//---------------------------------------------
class Interface2 : public Interface1
{
public:
virtual double ReturnSomeDouble();
};
template<typename myType>
class TClass2 : public TClass1<myType>, public Interface2
{
public:
double ReturnSomeDouble() {return 9.2;}
void CalculateSomethingElse(myType myValue) {}
TClass2() {}
};
//---------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
Interface2 myInterface = TClass2<float>();
int myInt = myInterface.ReturnSomeInt();
double myDouble = myInterface.ReturnSomeDouble();
return 0;
}
シンボルが見つからないという事実について、リンク エラー 2019 が表示されますInterface2::ReturnSomeDouble(void)
。何が問題なのですか?