错误C2143:语法错误:缺少';'在'*'之前声明指针时

时间:2012-05-05 12:57:50

标签: c++ pointers binary-tree

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

答案 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{};