我有一个带有几个迭代器的容器类作为嵌套类.结构是这样的:
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)