C++ 通用链表

2022-01-01 00:00:00 linked-list templates c++ generics

对于下面的代码:

#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> 但这不适合我的项目.我正在尝试使用 Foo2Foo3 对象的链接列表 - 由于我是 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 aclass 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: anexta was not declared in this scope
generic.C: In function aint main()a:
generic.C:69: error: template argument 1 is invalid
generic.C:69: error: invalid type in declaration before a;a token
generic.C:70: error: request for member aadda in alista, which is of non-class type ainta
generic.C:71: error: request for member aadda in alista, which is of non-class type ainta
generic.C:72: error: request for member aprintAlla in alista, which is of non-class type ainta

推荐答案

我认为问题是?"在链表中

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.

相关文章