【发布时间】:2011-07-28 08:10:02
【问题描述】:
我对以下代码有疑问:
template <typename U>
class lamePtr
{
public:
typedef U* ptr;
};
template <typename U>
class smarterPointer
{
public:
void funFun()
{
typedef lamePtr<U> someType;
someType::ptr query;
}
};
如你所见,我在 lamePtr 中有一个 typedef。在 smarterPointer 类中,我有一个函数 funFun()。我想要做的是制作另一个 typedef someType。直到那一行,一切正常,直到我们到达带有 someType::ptr 查询的那一行。
我希望在这里发生的是“查询”将成为 lamePtr::ptr (一个简单的值,而不是 typedef ;)。但是,我得到编译错误(使用 gcc 4.4.3):
temp.cpp: In member function ‘void smarterPointer<U>::funFun()’:
temp.cpp:15: error: expected ‘;’ before ‘query’
我在这里做错了什么?
【问题讨论】:
-
相关,有很多关于为什么需要
typename的信息:Where and why do I have to puttemplateandtypenameon dependent names? -
以后不要尝试用html标签来格式化你的代码。直接输入,全选,然后点击
{}按钮。 -
谢谢,我会记住这一点的。感谢詹姆斯的参考,我会花一些时间在上面
标签: c++ class templates typedef typename