C++模板嵌套类函数,返回嵌套类的引用,编译不过

template<typenameT>classQueue{public://DefinethenestedclassclassQueueItem{};public:cl... template <typename T> class Queue
{
public:
//Define the nested class
class QueueItem
{
};
public:
class QueuePoint1
{
public:
inline const int & operator + (const QueuePoint1&p);
inline const QueuePoint1 & operator = (const QueueItem*p);
};
public://Interface function
inline const Queue & operator = (const Queue<T>&);
};
/***************** Class implementation ********************/
//QueuePoint1 implementation

//返回int就能够编译通过
template <typename T> inline const int & Queue<T>::QueuePoint1::operator + (const Queue<T>::QueuePoint1&p)
{
return 0;
}
//返回嵌套类的引用,这个编译不能通过。错误: edit2.cpp:27: error: expected initializer before '&' token
template <typename T> inline const Queue<T>::QueuePoint1 & Queue<T>::QueuePoint1::operator = (const Queue<T>::QueueItem*p)
{
return *this;
}
//返回外围类饮用,这个可以通过
template <typename T> inline const Queue<T> & Queue<T>::operator = (const Queue<T>&)
{
return *this;
}
//环境: linux, g++
展开
 我来答
清影星河6A
2011-12-12 · TA获得超过851个赞
知道小有建树答主
回答量:753
采纳率:0%
帮助的人:899万
展开全部
这个问题是C++模板中的一个特性,像这个修改便可编译通过:
template <typename T> inline const typename Queue<T>::QueuePoint1 & Queue<T>::QueuePoint1::operator = (const Queue<T>::QueueItem*p)

解释一下就是,“依赖受限名称不能作为类型使用,除非在前面加上 typename关键字”。
依赖名称:含有模板类型参数<T>
受限名称:含有“::”符号
你的这个 Queue<T>::QueuePoint1 就是个典型,必须加typename关键字,编译器才能识别的。
追问
既然这样,第一个和第二个函数中的参数,为什么就是ok的?
追答
函数中的参数p没有被实际使用到过,编译编译或不编译,没有影响。
但要实际验证下才行。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式