C++ Generic Linked List(C++ 通用链表)
问题描述
对于下面的代码:
#include <iostream>
#include <string>
using namespace std;
class Foo2;
class Foo3;
template <class T>
class Foo1 {
public:
Foo1();
void print() {
cout << "My name is: " << name << endl;
}
T getNext(){
return nextLink;
}
string name;
T nextLink;
};
class Foo2 : public Foo1 {
public:
Foo2(){
name = "Foo2";
}
};
class Foo3 : public Foo1 {
public:
Foo3(){
name = "Foo3";
}
};
template <class T>
class LinkedList {
public:
T curr;
T first;
void add(T node){
if(first == NULL){
first = node
}
node->nextLink = this;
curr = node;
}
T getNext(){
return next;
}
void printAll(){
T curr = first;
cout << "Contents are: " ;
while(curr != NULL){
cout << curr.print() << ", ";
curr = curr.getNext();
}
}
};
int main() {
LinkedList<?> list;
list.add(new Foo2());
list.add(new Foo3());
list.printAll();
return 0;
}
我正在尝试实现一个通用链表,我意识到我可以导入 <list> 但这不适合我的项目.我正在尝试使用 Foo2 和 Foo3 对象的链接列表 - 由于我是 C++ 新手,以上是我能做到的最好的.
I'm attempting to implement a generic linked list, i realise that i could import <list> but that wouldn't suit my project. I'm trying to have a linked list of Foo2 and Foo3 objects - the above is the best i could accomplish as i'm new to C++.
错误:
generic.C: In instantiation of Foo1<Foo2>:
generic.C:26: instantiated from here
generic.C:22: error: Foo1<T>::nextLink has incomplete type
generic.C:6: error: forward declaration of âclass Foo2
generic.C: In instantiation of Foo1<Foo3>:
generic.C:34: instantiated from here
generic.C:22: error: Foo1<T>::nextLink has incomplete type
generic.C:7: error: forward declaration of class Foo3
generic.C: In member function void LinkedList<T>::add(T):
generic.C:50: error: expected ; before } token
generic.C: In member function T LinkedList<T>::getNext():
generic.C:55: error: ânextâ was not declared in this scope
generic.C: In function âint main()â:
generic.C:69: error: template argument 1 is invalid
generic.C:69: error: invalid type in declaration before â;â token
generic.C:70: error: request for member âaddâ in âlistâ, which is of non-class type âintâ
generic.C:71: error: request for member âaddâ in âlistâ, which is of non-class type âintâ
generic.C:72: error: request for member âprintAllâ in âlistâ, which is of non-class type âintâ
推荐答案
我认为问题是?"在链表中
I think the problem is the "?" in LinkedList
如果是这种情况,那么您应该使用 LinkedList.
If this is the case, then you should use LinkedList<Foo1 *>.
为什么不能使用 std::list?也许我们可以帮助您解决这个问题,使用您自己的实现会好得多.
Why can't you use std::list? Maybe we can help you with that, it will be far better that using your own implementation.
这篇关于C++ 通用链表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C++ 通用链表
基础教程推荐
- 为什么我们不能使用“虚拟继承"?在 COM 中? 2022-01-01
- 将不可复制的闭包对象传递给 std::function 参数 2021-01-01
- C++:获取传递给函数的多维数组的行大小 2021-01-01
- 如何更改 SysDateTimePick32 或 CDateTimeCtrl 的背景颜色? 2022-01-01
- 与 CAS 的原子交换(使用 gcc 同步内置函数) 2022-01-01
- 提升 ASIO 流缓冲 2021-01-01
- 如何部分禁用 cmake C/C++ 自定义编译器检查 2021-01-01
- c++ STL设置差异 2022-01-01
- 如何在 C++ 中正确使用命名空间? 2022-01-01
- 随机插入/删除的综合向量与链表基准 2022-01-01
