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

您的“实际头文件”包含两个默认构造函数的声明:

public:
    GridLayout();
    GridLayout();

您应该删除其中之一。

编辑:现在您#endif在标题末尾缺少一个,并且在文件末尾有一个太多.cpp...

于 2012-04-24T21:14:29.197 回答
2

弄清楚了!我会把它放在这里以防它对某人有帮助。

我必须在某个时候将 GridLayout.h 设置为编译,然后将其更改回来,因为目录中有一个 GridLayout.gch。所以编译器一定是直截了当,完全忽略了 .h 。我删除了该文件,现在它向我显示了我的代码中的所有真正错误。

于 2012-04-27T18:24:57.970 回答