从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
Declaring class type variable from other class gives C2143 error (missing ';' before '*" )
我正在用C++编码通用树,它将每个节点表示为类变量TreeNode,每个节点的子节点(可以大于2个(表示为TreeNodeList,这是TreeNodes的链表。
这是我到目前为止一直在处理的代码。
#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();
}
}
};
我写的"TreeNodeList* children"行一直给我C2143错误,在"*"之前说缺少";"。我无法理解这一点,因为从其他类声明类类型变量对我来说看起来完全没问题。 从其他类声明类类型变量会给出这种错误吗?我被困在这里,所以请帮助我解决问题。谢谢。
你对这一行有一些问题:
第一:尚未声明TreeNodeList
。您可以通过向前声明来解决此问题:
class TreeNodeList;
template <typename E>
class TreeNode {
但是,这对您不起作用,因为:
第二:TreeNodeList
是一个模板。因此,您需要在使用模板参数时指定它(并将其向前声明为模板(。您可以按如下方式修复children
声明:
template<typename E>
class TreeNodeList;
template <typename E>
class TreeNode {
private:
TreeNode* parent;
TreeNodeList<E>* children;
请注意children
声明与您的声明有何不同。
相关文章:
- 我的模板类方法返回错误类型?
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- Eclipse/CDT_C++给出"语义错误_"类型XXX无法解决"。项目运行
- 指针数据类型变量如何包含对象?
- turbo 为什么我的C++代码中出现错误类型名称预期"错误?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- "auto"推断出 hashtable_policy.h 中的错误类型
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 如何为结构类型变量赋值
- 设计自己的结果/两者之一:是否应该始终指定成功类型和错误类型
- 错误:变量或字段'PrintEntity'声明无效无效打印实体(实体 e);
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 错误:变量的类型不完整'introstructions'无法理解
- 不命名类型错误(在变量上)c++
- 错误:变量的类型不完整'void'