这是我使用的枚举类。
enum class PlayerColor {BLACK, BLUE, RED};
这就是我想要创建一个向量的方法。基本上,存储顶点名称及其颜色。 我收到了很多错误。
typedef pair<int, PlayerColor> ip;
vector< vector< ip > > vertices;
这就是我想要初始化2D向量(在构造函数内)
的方法for(auto i=vertices.begin()+1;i<vertices.end();++i)
for(auto j=i->begin()+1;j<i->end();++j)
{
*(j.first)=c++; //error
*(j.second)=PlayerColor::BLACK; //error
}
此函数采用两个顶点的名称并在它们之间添加边。 (常规工作正常)
addEdge(vertices[i][j+1].first,vertices[i][j].first); //error
编辑:
addEdge
函数定义为:
void HexBoard::addEdge(int u, int v)
{
edge[u].push_back(v);
edge[v].push_back(u);
}
edge
是:
vector< vector<int> > edge;
它以C ++ 11样式初始化为:
edge(vector< vector<int> > (size*size + 1 + 4)),EAST(size*size+1),WEST(size*size+2)
size
是一个整数。
答案 0 :(得分:2)
我看到的唯一错误是表达式*(j.first)=c++;
和*(j.second)=PlayerColor::BLACK;
你需要取消引用迭代器j
,如:
(*j).first=c++; //no error
(*j).second = PlayerColor::BLACK; //no error
编辑:
其他错误可能是因为你的代码没有像行中那样正确地声明:
addEdge(vertices[i][j+1].first,vertices[i][j].first);
如果i
和j
是整数类型,则此处没有错误。如果i
和j
是迭代器,那么您将收到错误。