1

これは私の二分木のヘッダーファイルです。TreeNodeというクラスがあり、もちろんBinaryTreeクラスにはそのルートへのポインターがあります。

そして私は次の3つのエラーを受け取りました

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.hまた、に含める必要はありませんNode.h。それは物事を円形にします。

于 2012-05-05T13:01:36.573 に答える
0

TreeNodeを前方宣言します。つまり、class TreeNode;前に追加しますclass BinaryTreeStorage{};

于 2012-05-05T13:02:13.213 に答える