这是带有边结构的区域结构。
/**
* district struct that keeps track of the name, valence, and connections a district has to others
*/
struct district {
/**
* contains an edge with two vertices
*/
struct edge {
district *vertex1, *vertex2;
/**
* initializes both vertices to nullptr
*/
edge() :
vertex1(nullptr), vertex2(nullptr) {
}
};
T name;
int valence;
edge *connection[100];
int color;
/**
* initializes all struct members to default values
*/
district(T name) :
name(name), valence(0), connection { nullptr }, color(100) {
}
};
我试图像这样在顶点之间创建边:
list[i]->connection[list[i]->valence]->vertex1 = list[i];
list[i]->connection[list[i]->valence]->vertex2 = list[j];
list[i]->valence++; //add 1 to the amount of vertices for district a
list[j]->connection[list[j]->valence]->vertex1 = list[j];
list[j]->connection[list[j]->valence]->vertex2 = list[i];
list[j]->valence++; //add 1 to the amount of vertices for district b
sort(); //sort the list in order of valence
但是为了将数据写入该边缘,据我所知,需要首先使用“new”运算符创建数据。如果区域已经存在,那么这些区域已经在代码中进一步初始化到列表数组中它们各自的位置,我不需要帮助。
我尝试了几种创建新边缘的不同方法:
list[i]->connection[list[i]->valence] = new district.edge;
list[i]->connection[list[i]->valence] = new district->edge;
list[i]->connection[list[i]->valence] = new edge;
但它们都不起作用。我该如何做到这一点?
答案 0 :(得分:3)
new district.edge
不,district
不是对象。
new district->edge
不,district
不是指针。
new edge
范围内没有名为edge
的类型。 (除非你在district
的成员函数中执行此操作。)
相反,请使用范围解析运算符::
:
new district::edge
答案 1 :(得分:0)
有一种在C ++ 11中创建district::edge
的新方法:
首先:获取e
的对象district::edge
:
auto e = *(p);//p is a pointer of district::edge and it point to a real object of district::edge
第二:推导district::edge
形成对象e
:
using edge = decltype(e);
现在,edge
是district::edge
类型。
我们可以写这样的代码:
list[i]->connection[list[i]->valence] = new edge();
注意:这是在C ++ 11中获取未知类型的常用方法。