1

クラスを作成し、それをソース ファイルとヘッダー ファイルに分割しましたが、相互に通信できません。

私のヘッダーファイルはGridLayout.h次のようになります。

#ifndef GRIDLAYOUT_H_INCLUDED
#define GRIDLAYOUT_H_INCLUDED

#include <vector>
#include <types.h>
#include "GridPlaceable.h"

namespace Spaceships {

class GridLayout {
    //consider replace with std::list
    typedef std::vector<GridPlaceable*> column;

    public:
        GridLayout();
        ~GridLayout();

        void arrange();
        void splitColumn(size_t colNo, distance position);
        void splitRow(size_t rowNo, distance position);
        bool placeOne(GridPlaceable* thatOne);

private:
        bool tryToFit(GridPlaceable* thatOne, size_t startCol, size_t startCell);

        std::vector<column> wholeGrid;
        std::vector<GridPlaceable*> toPlace;

        std::vector<distance> rowHeights, colWidths;
        std::vector<size_t> firstEmpties;

        bool mandates;
};

};

GridLayout.cpp次のようになります。

#include "GridLayout.h"

namespace Spaceships {

GridLayout::GridLayout() {

}

//GridLayout::aBunchOfOtherFunctions() { }

}

#endif

コンパイルすると、大量のGridLayout does not name a typeエラーが発生します。何が原因でしょうか? セミコロンをたくさん入れて同様の問題を解決したことを覚えているようですが、今回はうまくいかないようです。

4

2 に答える 2

5

「実際のヘッダー ファイル」には、デフォルト コンストラクターの 2 つの宣言が含まれています。

public:
    GridLayout();
    GridLayout();

これらのいずれかを削除する必要があります。

編集:そして今#endif、ヘッダーの最後に がなく、.cppファイルの最後に が多すぎます...

于 2012-04-24T21:14:29.197 に答える
2

理解した!誰かに役立つ場合に備えて、これをここに置きます。

ディレクトリに GridLayout.gch が横たわっていたので、ある時点で GridLayout.h をコンパイルするように設定してから元に戻したに違いありません。したがって、コンパイラはそのためにまっすぐ進み、.h を完全に無視したに違いありません。そのファイルを削除したところ、コード内のすべての実際のエラーが表示されました。

于 2012-04-27T18:24:57.970 に答える