我已经看到了堆栈上的所有其他帖子都出现了这个确切的问题,但是我想知道它是否在C ++ 17 /稍早的时候有所更改(也许使用了extern关键字)
这是针对那些陌生人的场景:
/// Foo.hpp
namespace Foo
{
class CFoo
{
public:
template< typename T > T fnFoo( T );
};
int fnFooInt( int );
}
/// Foo.cpp
template< typename T > T Foo::CFoo::fnFoo( T x ) // doesn't work
{
return x;
}
int fnFooInt( int iFoo ) // works
{
return iFoo;
}
一种解决方案是声明使用了哪些模板(哪种破坏了模板的目的)。另一个如下:
/// Bar.hpp
namespace Bar
{
class CBar
{
public:
template< typename T > T fnBar( T );
};
int fnBarInt( int );
}
/// Bar.tpp
template< typename T > T Bar::CBar::fnBar( T x ) // works
{
return x;
}
/// Bar.cpp
int fnBarInt( int iBar ) // works
{
return iBar;
}