【发布时间】:2011-10-29 18:03:19
【问题描述】:
当我尝试从以下代码创建可执行文件时出现链接器错误。我觉得我需要在周围放置一些“typenames”或进行一些前向声明;我尝试了几种组合,但都没有奏效。
template<typename T>
class enabled
{
private:
T type_;
friend const T& typeof(const enabled<T>& obj); // Offending line
};
template<typename T>
const T& typeof(const enabled<T>& obj) {
return obj.type_;
}
int main()
{
enabled<std::string> en;
std::cout << typeof(en);
std::cin.clear(), std::cin.get();
return 0;
}
1>main.obj : error LNK2001: unresolved external symbol "class std::string const& __cdecl typeof(class enabled
const&)"
【问题讨论】:
-
gcc 似乎提供了更有用的诊断 [我将
typeof更改为type,因为 gcc 有typeof扩展名]:prog.cpp:17:警告:朋友声明 'const T& type (const enabled&)' 声明了一个非模板函数 prog.cpp:17: 注意: (如果这不是你想要的,请确保函数模板已经被声明并在函数名后面添加 ) 但是,不确定如何将其转化为解决方案。