我有一个与此等效的 Visual Studio 2012 项目:
头文件.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"
. 这一定是一些项目设置的事情,但是什么?