これに相当する Visual Studio 2012 プロジェクトがあります。
Header.h
template< class T >
inline int Demonstrate( const char *txt, T *input )
{
return printf("%s %d %f\n", txt, input->Integer(), input->Real() );
}
ソース.cpp
#include "Header.h"
class Foo
{
public:
int Integer() { return 2; }
float Real() { return 3.14159f; }
};
int main()
{
Foo example;
printf( "%d\n", Demonstrate( "foo:", &example ) );
return 0;
}
しかし、コンパイルすると、LNK2019 エラーが発生します。
unresolved external symbol "int __cdecl Demonstrate(char const *,class Foo *)"
通常、これはテンプレート化された関数がヘッダーで宣言され、cpp でのみ定義されている場合に発生しますが、ここではそうではありません。関数はヘッダーでインラインで定義されます。
何が原因で、どうすれば修正できますか?
編集
これは、ヘッダーを完全に削除して、Demonstrate() を Source.cpp の先頭に貼り付けただけでも発生します。プロジェクトのプロパティの「インライン関数展開」が「デフォルト」または「.」に設定されている場合に発生し"/Ob2"
ます。これはプロジェクト設定の一部に違いありませんが、何ですか?