在模板类中引用下一个类,gettng错误“expected';'”

时间:2011-06-19 15:32:52

标签: c++

在尝试编译以下代码时,我得到以下内容:

preallocarray.h: In member function 'void PreallocArray<T>::push_back(const T&)':
preallocarray.h:82: error: expected `;' before 'itr'

我在我创建的LinkedList类中有一个嵌套的const_iterator类。我做C ++已经很多年了,所以这可能是由于愚蠢的事情造成的,但是我一直在乱搞并且谷歌搜索了一个小时没有运气......

这是我在linklist.h中删除的链表类定义:

template <typename T> 
class LinkedList 
{
    <snip...>
    public:
        class const_iterator
        {
        <snip...>
        };
    <snip...>
};

然后我在preallocarray.h中声明了第二个类,如下所示:

#include "linklist.h"
template <typename T>
class PreallocArray
{
    <snip...>
    public:
        void push_back( const T & newValue )
        {
            if (capacity == size)
            {
                allocateNode( capacity / 2 );
            }
            LinkedList<Node>::const_iterator itr; // error occurs here
            theList.end();
        }
    <snip...>

    private:
        LinkedList<Node> theList; // the linked list of nodes
    <snip...>
};

1 个答案:

答案 0 :(得分:2)

LinkedList<Node>::const_iterator itr; // error occurs here

基于封闭类实际类模板的事实,我怀疑你打算写T而不是Node。顺便说一下,Node是什么?它定义在哪里?

如果你真的想写T,那么你应该把它写成:

typename LinkedList<T>::const_iterator itr; 

如上所述,不要忘记写typename。如果您要编写typename,即使模板参数为Node,但其定义在某种程度上取决于T

typename LinkedList<Node>::const_iterator itr;//if Node depends on T

要知道为什么需要typename,请参阅 @Johannes Schaub 的回答: