gpt4 book ai didi

c++ - 在模板类中引用下一个类,gettng error "expected ' ;'"

转载 作者:行者123 更新时间:2023-11-28 03:48:42 26 4
gpt4 key购买 nike

我在尝试编译下面的代码时得到以下信息:

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...>
};

最佳答案

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 的回答:

关于c++ - 在模板类中引用下一个类,gettng error "expected ' ;'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6403329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com