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;
};
有沒有更好的選擇,我只需要保留兩個對象而不是三個?
我已經遇到這個問題,我想前進存儲指向一個向量類時,因爲我認爲在內部宣佈性病足夠::向量只是保持一個指針,但在我的情況下,它不會讓我。我不知道這與分配器需要知道它的大小還是什麼有關。 – Zebrafish
如果您轉發聲明容器或函數聲明中使用的指針或引用類型,則在使用它之前,仍然需要定義類型。所以這可能發生在你身上。或者你可能陷入了擁有一個具有前向聲明模板類型的std :: unique_ptr類成員而沒有明確定義析構函數的陷阱(在這種情況下,析構函數是默認的,並試圖調用「delete」前向聲明類型)。 – paddy