关于模板的问题

bnbjin 2016-12-27 05:26:44

template <typename T>
class abc
{
friend void visit(abc<T>* t);
T a;
};

template <typename T>
void visit(abc<T>* t)
{

}

int main(void)
{
abc<int> intabc;

visit(&intabc);

return 0;
}

G++提示:对‘visit(abc<int>*)’未定义的引用。
去掉友元的声明可以通过编译链接。
请问问题是出在哪里呢?
...全文
94 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bnbjin 2016-12-27
  • 打赏
  • 举报
回复
谢谢男神,问题解决了
xskxzr 2016-12-27
  • 打赏
  • 举报
回复
原因在于编译器把友元声明中的visit识别为一个普通函数而非模板函数。 解决办法楼上已经说了。
yes-hyh 2016-12-27
  • 打赏
  • 举报
回复
引用 1 楼 heyuhang112 的回复:


template <typename T>
class abc
{
	template<typename T2>
	friend void visit(abc<T2>* t);

	T a;
};

template <typename T>
void visit(abc<T>* t)
{

}

int main(void)
{
	abc<int> intabc;

	visit(&intabc);

	return 0;
}
修改下abc中友元函数的申明
yes-hyh 2016-12-27
  • 打赏
  • 举报
回复


template <typename T>
class abc
{
	template<typename T2>
	friend void visit(abc<T2>* t);

	T a;
};

template <typename T>
void visit(abc<T>* t)
{

}

int main(void)
{
	abc<int> intabc;

	visit(&intabc);

	return 0;
}

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧