从其他类声明类类型变量会导致C2143错误(在';*“之前缺少';'”) < >我用C++编码通用树,它将每个节点表示为类变量树,每个节点的子(可以大于2)表示为树节点的链表。

从其他类声明类类型变量会导致C2143错误(在';*“之前缺少';'”) < >我用C++编码通用树,它将每个节点表示为类变量树,每个节点的子(可以大于2)表示为树节点的链表。,c++,C++,这是我到目前为止一直在编写的代码 #include "stdafx.h" #include <iostream> using namespace std; template <typename E> class TreeNode { private: TreeNode* parent; TreeNodeList* children; // This line gives C2143 Error, missing ';' before '*'

这是我到目前为止一直在编写的代码

#include "stdafx.h"
#include <iostream>
using namespace std;

template <typename E>
class TreeNode {
    private:
    TreeNode* parent;
    TreeNodeList* children; // This line gives C2143 Error, missing ';' before '*'
    TreeNode* next;
    E data;
public:
    friend class TreeNodeList;
    TreeNode() {}
    TreeNode(E& data) {this->data = data;}
    void setParent(TreeNode<E> &p) {parent = &p;}
    void setData(E& data) { this->data = data; }
    void setNext(TreeNode<E>& n) { next = &n; }
    void addChild(TreeNode<E>& ch) {
        children.add(ch);
        ch.setParent(this);
    }
    TreeNode<E>* getChildren() const { return children; }
    TreeNode<E>* getNext() const { return next; }
    TreeNode<E>* getParent() const { return parent; }
    const E& getData() const { return data; }
};

template <typename E>
class TreeNodeList {
private:
    TreeNode* head;
    TreeNode* last;
    int size;
public:
    TreeNodeList() : head(NULL), last(NULL) { head = last; size = 0; }
    ~TreeNodeList() {
        while (!empty()) {
            removeFront();
        }
    }
    const bool empty() const {
        return size = 0;
    }
    void removeFront() {
        if (empty()) {
            return; //can't remove empty list
        }
        else {
            TreeNode<E>* old = head;
            head = head->getNext();
            delete old;
        }
    }
    void add(TreeNode<E>& p) {
        last->setNext(p);
        last = last->getNext();
    }
    void print() {
        TreeNode<E>* p = head;
        while (p != NULL) {
            cout << p->getData() << " ";
            p = p->getNext();
        }
    }
};
#包括“stdafx.h”
#包括
使用名称空间std;
模板
三烯类{
私人:
TreeNode*父代;
TreeNodeList*children;//此行给出C2143错误,在“*”之前缺少“;”
TreeNode*下一步;
E数据;
公众:
朋友级树专家;
TreeNode(){}
TreeNode(E&data){this->data=data;}
void setParent(TreeNode&p){parent=&p;}
void setData(E&data){this->data=data;}
void setNext(TreeNode&n){next=&n;}
void addChild(TreeNode&ch){
儿童。添加(ch);
ch.setParent(本);
}
TreeNode*getChildren()常量{return children;}
TreeNode*getNext()常量{return next;}
TreeNode*getParent()常量{return parent;}
常量E&getData()常量{return data;}
};
模板
等级树专家{
私人:
TreeNode*头;
最后一个;
整数大小;
公众:
TreeNodeList():head(NULL),last(NULL){head=last;size=0;}
~TreeNodeList(){
而(!empty()){
removeFront();
}
}
常量bool empty()常量{
返回大小=0;
}
void removeFront(){
if(空()){
return;//无法删除空列表
}
否则{
TreeNode*旧=头部;
head=head->getNext();
删除旧的;
}
}
无效添加(TreeNode&p){
最后->设置下一步(p);
last=last->getNext();
}
作废打印(){
TreeNode*p=头部;
while(p!=NULL){
cout getData()getNext();
}
}
};
我写的“TreeNodeList*children”一行不断地给我C2143错误,上面写着失踪“;”在“*”之前。我无法理解这一点,因为从其他类声明类类型变量在我看来完全没有问题。
从其他类声明类类型变量是否会导致此类错误?我被困在这里,请帮我解决这个问题。谢谢。

您对该行有一些问题:

第一:
TreeNodeList
尚未声明。您可以通过转发声明来解决此问题:

class TreeNodeList;

template <typename E>
class TreeNode {

请注意
子项的声明与您的声明有何不同

您对该行有一些问题:

第一:
TreeNodeList
尚未声明。您可以通过转发声明来解决此问题:

class TreeNodeList;

template <typename E>
class TreeNode {
请注意
子项的声明与您的声明有何不同

参见此处:参见此处: