这是我的二叉树的头文件。 我有一个名为TreeNode的类,当然BinaryTree类有一个指向其根目录的指针。
我得到了三个错误
error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
BinaryTree头文件的代码
#pragma once
#include <fstream>
#include <iostream>
#include "Node.h"
using namespace std;
class BinaryTreeStorage
{
private:
TreeNode* root;
public:
//Constructor
BinaryTreeStorage(void);
//Gang Of Three
~BinaryTreeStorage(void);
BinaryTreeStorage(const BinaryTreeStorage & newBinaryTreeStorage);
BinaryTreeStorage& operator=(const BinaryTreeStorage & rhs);
//Reading and writing
ofstream& write(ofstream& fout);
ifstream& read(ifstream& fin);
};
//Streaming
ofstream& operator<<(ofstream& fout, const BinaryTreeStorage& rhs);
ifstream& operator>>(ifstream& fin, const BinaryTreeStorage& rhs);
错误似乎在第11行
TreeNode* root;
我花了几天时间试图摆脱这个错误并彻底毁灭。
这是关于错误命名空间的错误吗?或者TreeNode类可能没有声明正确吗?
以防万一TreeNode头文件的代码
#pragma once
#include <string>
#include "BinaryTreeStorage.h"
using namespace std;
class TreeNode
{
private:
string name;
TreeNode* left;
TreeNode* right;
public:
//Constructor
TreeNode(void);
TreeNode(string data);
//Gang of Three
~TreeNode(void);
TreeNode(const TreeNode* copyTreeNode);
//Reading and writing
ofstream& write(ofstream& fout);
//Add TreeNode
void addTreeNode(string data);
//Copy tree
void copy(TreeNode* root);
};
提前谢谢。
答案 0 :(得分:3)
而不是
#include "Node.h"
只需转发声明类:
class TreeNode;
另外,为什么要在BinaryTreeStorage.h
中加入Node.h
?没有必要,所以删除它。
答案 1 :(得分:3)
看起来Node.h包含了BinaryTreeStorage.h,因此当您尝试编译Node.h(类TreeNode)时,它首先编译BinaryTreeStorage,但这需要知道尚未编译的TreeNode。< / p>
解决这个问题的方法是转发声明类:
class TreeNode;
告诉编译器期望稍后定义一个类型的TreeNode,但是在此期间你可以声明该类型的指针和引用。最后要做的是删除#include "Node.h"
。这打破了你的循环引用。
答案 2 :(得分:0)
您在ofstream
课程的定义中使用了TreeNode
,但您没有将其包括在内:
#include <fstream> //include this in Node.h
请这样做。
此外,无需在BinaryTreeStorage.h
中加入Node.h
。它使事情循环。
答案 3 :(得分:0)
转发声明TreeNode,即在class TreeNode;
class BinaryTreeStorage{};