从其他类声明类类型变量会导致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 {
请注意子项的声明与您的声明有何不同 参见此处:参见此处: