怎样定义 使用了template的类成为 友元类?

raeck 2006-10-17 06:24:48
template <typename T>
class Node
{
template <typename T> friend class IntStack;//这里出错
private:
T data;
Node<T> *next;
};

template <typename T> class IntStack
{
...................
}

上面代码在bc上面可以编译, 但是在msvc上面就报错了, 为什么呢? 是不是语法上有些不一样? 拜托各位大侠了
...全文
250 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
raeck 2006-10-19
  • 打赏
  • 举报
回复
to taodm(taodm) :
thank you, i got the correct answer from the book. ^_^
HappyTree 2006-10-18
  • 打赏
  • 举报
回复
应该这样吧?
template <typename T>
class Node
{
template <typename Ty> friend class IntStack;//这里出错
private:
T data;
Node<T> *next;
};
模板参数定义不要一样就可以了。以前有人解释过这个问题,我现在想不起来了。但知道这么用是可以的。
taodm 2006-10-18
  • 打赏
  • 举报
回复
告诉过你了,扔了VC6!
连C++ Primer的页码都帮你查了,都还懒得去看。
raeck 2006-10-18
  • 打赏
  • 举报
回复
to wanfustudio(雁南飞:不慕虚名务潜修) :
编译是通过了 ,但是IntStack类并不能操作 Node类里面的private 的数据哦。
taodm 2006-10-17
  • 打赏
  • 举报
回复
呃,又是垃圾的VC6,扔了它。
可看C++Primer3e P683.
飞哥 2006-10-17
  • 打赏
  • 举报
回复
template <typename T>
class IntStack;//这里出错///////////////////modified here
friend class IntStack;//这里出错///////////////////modified here
飞哥 2006-10-17
  • 打赏
  • 举报
回复
呵呵
编译通过

-----------
飞哥 2006-10-17
  • 打赏
  • 举报
回复
模板类的每一个函数,即使它的具体类型已经知道,在写函数时也要加上template<class ET>,,虽然与ET无关,但是在书写时还是要加上template修饰,否则编译通不过。

果在模板中要使用友元类,在前视申明的时候,不要加类型
------------------
template <typename T>
class IntStack;//这里出错///////////////////modified here

template <typename T>
class Node
{

friend class IntStack;//这里出错

private:
T data;
Node<T> *next;
};
sinall 2006-10-17
  • 打赏
  • 举报
回复
试下这个:
template <typename T> class IntStack;

template <typename T>
class Node
{
template <typename T> friend class IntStack;//这里出错
private:
T data;
Node<T> *next;
};

template <typename T> class IntStack
{
...................
}

64,266

社区成员

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

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