0

次のコードを実行すると...

#ifndef KEYEDITEM_H_INCLUDED
#define KEYEDITEM_H_INCLUDED

#include <string>

typedef std::string KeyType;

class KeyedItem {
    public:
        KeyedItem() {}
        KeyedItem(const KeyType& keyValue) : searchKey(keyValue) {}
        KeyType getKey() const
        { return searchKey;
        }

    private:
        KeyType searchKey; };

#endif // KEYEDITEM_H_INCLUDED

「エラー: 'KeyType' の前に初期化子が必要です」というエラー メッセージが表示されます。

最初はこれが文字列型の宣言に関連している可能性があると思ったので、次のように変更して動作するかどうかを確認しました...

#ifndef KEYEDITEM_H_INCLUDED
#define KEYEDITEM_H_INCLUDED

#include <string>
//typedef std::string KeyType;

class KeyedItem
{
    public:
        KeyedItem() {}
        KeyedItem(const std::string& keyValue) : searchKey(keyValue) {}
        std::string getKey() const
        { return searchKey;
        }

    private:
        std::string searchKey;
};

#endif // KEYEDITEM_H_INCLUDED

しかし、「エラー:1つの宣言に複数のタイプがあります」というエラーが表示されました。これらのエラーの両方のエラーを探しましたが、役立つものは何も見つかりませんでした。クラスを調べて、必要な場所にセミコロンがあることを確認しましたが、それらすべてがあるようです。

実装ファイルが必要ないという理由だけで実装ファイルを持っていませんが、それが問題になる可能性はありますか?

これは二分探索木の単なるクラスです。GNU GCC コンパイラを使用して CodeBlocks で作業しています。

TreeNode.h

#ifndef TREENODE_H_INCLUDED
#define TREENODE_H_INCLUDED

#include "KeyedItem.h"

typedef KeyedItem TreeItemType;

class TreeNode
{
    private:
        TreeNode() {}
        TreeNode(const TreeItemType& nodeItem,
                 TreeNode *left = NULL,
                 TreeNode *right = NULL) : item(nodeItem), leftChildPtr(left), rightChildPtr(right) {}

        TreeItemType item;
        TreeNode *leftChildPtr, *rightChildPtr;

        friend class BinarySearchTree;
};

#endif // TREENODE_H_INCLUDED
4

2 に答える 2

1

gccではなくg++でコンパイルする必要があります

于 2010-11-28T04:37:28.973 に答える
0

解決済み...メインにヘッダー インクルードがありませんでした。

于 2010-11-28T05:07:16.417 に答える