小编tho*_*ler的帖子

包括嵌套类

我有一个带有几个迭代器的容器类作为嵌套类.结构是这样的:

class Grid
{
protected:
    class Iterator
    {
        Iterator(Grid* g) : grid(g){}
        Grid* grid;
    }
    class MoreIterator : public Iterator
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想将迭代器移动到自己的头文件中,以清理容器代码.

class Grid
{
protected:
#include "griditerators.h"
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这编译没有错误.但:

在QtCreator中排队

Iterator(Grid* g) : grid(g){}
Grid* grid;
Run Code Online (Sandbox Code Playgroud)

被标记为错误,告诉我"网格不是类型名称".

我以为我可以通过griditerator.h文件中的前向声明来解决这个问题:

class Grid;
class Iterator
{
    Iterator(Grid* g) : grid(g){}
    Grid* grid;
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个编译错误:类Grid与声明它的类具有相同的名称.

用#include"grid.h"替换前向声明.但我不知何故认为这很难看.

所以我有两个工作选择.一个显示我的IDE中的丑陋错误,另一个我不喜欢那么多.

我尝试了其他变体,其中include不在封闭类中,但由于不同的原因而无法编译.

所以我的问题是:是否有任何"最佳实践"或包含模式来处理太大而无法将它们保存在封闭类文件中的嵌套类?

例如,有没有办法声明一个嵌套类,如:

class Grid::Iterator
Run Code Online (Sandbox Code Playgroud)

c++ nested-class

1
推荐指数
1
解决办法
1940
查看次数

标签 统计

c++ ×1

nested-class ×1