读书人

还是模版有关问题!

发布时间: 2012-02-17 17:50:42 作者: rapoo

还是模版问题!!!
c++ primer 4th p553

template <class T> class A;

template <class T> class B
{
friend class A <T> ;
friend class E <T> ;
};

如果没有告诉编译器该友元是一个模版,则编译器认为该友元是一个普通非模版类或非模版函数。

我想问的是,编译器如何把E当成一个普通非模板类呢?

[解决办法]
如果你这么写:
template <class T> class B
{
friend class A;
};

那么编译器认为有一个普通类叫做A,如果你没有定义这样的类,那你就该碰到编译错误了
你定义了A <T> 也没有用
[解决办法]
你此处写的是friend class E <T> ;,这就说明E一定是一个模版类,而且E与A的友元关系是绑定的(bound),即每个T所对应的E和A是友元关系,不同的T对应的E和A不是友元关系。

PS:有关friend和template的地方,是比较麻烦的地方,有一些语法在各个编译器之间有不同的解释,而且好像差的还很多,所以不要太过认真,否则就专牛角尖儿了。

读书人网 >C++

热点推荐