在尝试编译以下代码时,我得到以下内容:
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...>
};
答案 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 的回答: