模板类中的Typedef不起作用

我有以下代码的问题:
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&lt; U> :: ptr(一个简单的值,不是typedef;)。但是,我得到编译错误(使用gcc 4.4.3):
temp.cpp: In member function ‘void smarterPointer<U>::funFun()’:
temp.cpp:15: error: expected ‘;’ before ‘query’
我在这做错了什么?     
已邀请:
someType
,因为
lamePtr<U>
是“从属名称”。这取决于
U
是否有成员
ptr
,如果是,那个成员是什么样的“东西”。 当然,你知道对于所有
T
lamePtr<T>::ptr
是一种类型,但在编译的这个阶段,解析器并不知道。 使用
typename
关键字向解析器提示它是一个类型。其余的将在编译过程的后期解决。只是一点点C ++怪癖。
template <typename U>
class lamePtr
{
public:
    typedef U* ptr;
};

template <typename U>
class smarterPointer
{
    public:
    void funFun()
    {
        typedef lamePtr<U> someType;
        typename someType::ptr query;
    }
};
    
你需要
typename
关键字来表示
someType::ptr
是一种类型。
    typename someType::ptr query;
官方说明,什么是typename?细节。     

要回复问题请先登录注册