gpt4 book ai didi

c++ - 不合格的 ID 和模板类

转载 作者:太空狗 更新时间:2023-10-29 23:05:39 26 4
gpt4 key购买 nike

我一直在为循环列表编写自定义类,称为 CList。我一直基于我很久以前完成的家庭作业,其中有很多复制粘贴,所以我不完全记得我一直在写的所有作品。

无论如何,简单地尝试包含 .h 文件会导致我在 using namespace std 行上出现错误:

main.cpp:11: error: expected unqualified-id before ';' token

还有两个指向我代码中函数的错误:

In file included from main.cpp:9:
CList.h:119: error: non-template 'CIterator' used as template
CList.h:119: note: use 'CList<T>::template CIterator' to indicate that it is a template

这是有问题的功能:

template <class T> 
typename CList<T>::CIterator<T> CList<T>::push(T const& v)
{
size++;
Node<T>* p = new Node<T>(v);

if (this -> size_ == 1)
{
head = p;
tail = p;
p -> next = p;
p -> prev = p;
}
else
{
tail -> next = p;
p -> next = head;
p -> prev = tail;
head -> prev = p;
tail = p;
}

return CIterator(p);
}

我不太明白这里的错误是什么。我告诉函数返回一个 CList 的 CIterator,并表示这个函数是 CList 类的一部分。这就是我阅读该行时的理解

typename CList<T>::CIterator<T> CList<T>::push(T const& v) 

为什么明明T是模板,却认为CIterator是模板?我只是很困惑。

最佳答案

错误消息指出 CIterator<T>不被视为模板。这是因为它是一个从属名称,编译器只能在实例化时真正确定它确实是一个嵌套模板。解决这个问题的方法是告诉编译器它实际上是一个模板:

template <class T> 
typename CList<T>::template CIterator<T> CList<T>::push(T const& v)
{
...
}

编译器不知道 CList<T>::CIterator<T> 是否存在的原因是模板是类CList<X>可以专门用于某种类型 X里面没有嵌套模板。但是,编译器仅在实例化模板时才发现这些特化。

关于c++ - 不合格的 ID 和模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436001/

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