【发布时间】:2011-01-16 13:55:42
【问题描述】:
下面的代码:
#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++ 新手。
错误:
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â
【问题讨论】:
-
您遇到了什么问题?
-
家庭作业?如果没有,为什么不使用
std::list? -
为什么
std::list不能满足您的需求? -
不是功课——链表很简单,但不是通用链表。
-
说
std::list不能“满足您的需求”是荒谬的。它是一个实现良好的链表。如果你需要一个好的链表,那就是你应该使用的。如果你需要别的东西,那么尝试编写你自己的链表就没有什么意义了。很抱歉,std::list有 99.9% 的可能性是您需要的。最后的 0.01% 是为了覆盖它不是的可能性,然后你自己的实现也不会工作
标签: c++ templates generics linked-list