1

这是我的二叉树的头文件。我有一个名为 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);
};

先感谢您。

4

4 回答 4

4

代替

#include "Node.h"

只需转发声明类:

class TreeNode;

另外,你为什么要BinaryTreeStorage.h加入Node.h?不需要它,所以删除它。

于 2012-05-05T13:01:14.017 回答
3

看起来 Node.h 包含 BinaryTreeStorage.h,因此当您尝试编译 Node.h(TreeNode 类)时,它首先编译 BinaryTreeStorage,但这需要知道尚未编译的 TreeNode 是什么。

解决这个问题的方法是转发声明类:

    class TreeNode;

它告诉编译器期望稍后定义一个 TreeNode 类型的类,但您可以同时声明该类型的指针和引用。最后要做的就是删除#include "Node.h". 这会破坏您的循环引用。

于 2012-05-05T13:03:26.957 回答
0

你在类ofstream的定义中使用TreeNode,但你没有包括这个:

#include <fstream> //include this in Node.h

请这样做。

此外,不需要包含BinaryTreeStorage.hin Node.h。它使事情变得循环。

于 2012-05-05T13:01:36.573 回答
0

前向声明 TreeNode 即添加class TreeNode;之前class BinaryTreeStorage{};

于 2012-05-05T13:02:13.213 回答