0
これは、そのコード行にまだ存在しないオブジェクトが含まれているため、接続ベクトルを持つことができないことがわかります。頂点はまだ存在しないので、私は順序を入れ替えることができません。他のオブジェクトのポインタのベクトルを含むオブジェクト
struct Vertex {
int key;
int val;
vector<Edge*> connections;
Vertex(int k) {
key = k;
}
};
struct Edge {
Vertex *start;
Vertex *end;
int weight;
Edge(Vertex *s, Vertex *e, int w) {
start = s;
end = e;
weight = w;
}
};
私の解決策は、新しいオブジェクトを作成し、そこに接続を配置することです。
struct Node {
int key;
int val;
Node(int k) {
key = k;
}
};
struct Edge {
Node *start;
Node *end;
int weight;
Edge(Node *s, Node *e, int w) {
start = s;
end = e;
weight = w;
}
};
struct Vertex {
Node node;
vector<Edge*> connections;
};
3つではなく2つのオブジェクトを保存する必要がある場合は、より良い方法がありますか?
::ベクトルはちょうどそれへのポインタを保持していましたが、私の場合はそれは私をさせませんでした。私はそれがアロケータのサイズを知る必要があるかどうかわからない。 – Zebrafish
コンテナ宣言または関数宣言で使用されるポインタまたは参照型を宣言する場合は、それを使用する前に型を定義する必要があります。それはあなたに起こった可能性があります。または、明示的にデストラクタを定義しなくても、前方宣言されたテンプレート型を持つ 'std :: unique_ptr'クラスメンバを持つという罠に陥っているかもしれません(その場合、デストラクタはデフォルトであり、前方宣言型)。 – paddy