当我尝试从以下代码创建可执行文件时出现链接器错误。我得到的印象是我需要在周围放置一些“typename
”或做一些前向声明;我尝试了几种组合,但都没有用。
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<class std::string> const&)"
最佳答案
通过前向声明和指定函数是模板化的
template<typename T> class enabled;
template<typename T>
const T& typeof(const enabled<T>& obj) {
return obj.type_;
}
template<typename T>
class enabled
{
private:
T type_;
friend const T& typeof<>(const enabled<T>& obj);
};
关于c++ - 类模板友好函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940703/