[英]Pointer confusion causing "no matching function call for std::vector"?
我有一個 C++ class 有一個數據成員:
private:
std::vector<std::vector<int>> *edges;
然后在我的構造函數中,我執行以下操作:
//rows and columns are dynamically set in constructor
edges = new vector<vector<int> >(rows*columns, vector<int>());
edges[0].push_back(1);
運行我的程序時,我得到
error: no matching function for call to std::vector<std::vector<int> >::push_back(int)
edges[0].push_back(1);
^
我只知道這與指針/引用有關,但我對 C++ 的經驗不夠,無法弄清楚,而且這個錯誤消息感覺很模糊。 有人知道這兩行有什么問題嗎?
EDIT1:我還嘗試將數據成員更改為 object (不是指針)並這樣做,但現在我的程序只是停滯不前
for (int i = 0; i < (rows*columns); i++) {
vector<int> neighbors;
edges.push_back(neighbors);
}
EDIT2:我也嘗試使用 paxdiablo 的答案,但現在這條線拋出了 bad_alloc
edges = new vector<vector<int> >(rows*columns, vector<int>());
這是加載二維向量的示例:
std::vector<std::vector<int>> board;
for (int row = 0; row < 4; ++row)
{
std::vector<int> row;
for (int column = 0; column < 4; ++column)
{
row.push_back((row * 4) + column);
}
board.push_back(row);
}
上面的代碼初始化了一個二維數組,4x4,每個槽/正方形都有一個唯一的數字。
內部循環初始化一個“行”向量。
“行”向量初始化后,“推回”到“板”向量。
edge 是一個指針,因此edges
edges[0]
實際上是外部向量,您不能將 append 和 integer 指向向量的向量。
你需要的是這樣的:
(*edges)[0].push_back(1);
取消引用為您提供外部向量,然后[0]
為您提供第一個內部向量,您可以append 和 integer 到。
還有其他方法可以做到這一點,但這里的目的是簡單地解釋正在發生的事情。
具體來說,最好在 class 中聲明向量而不是指向向量的指針。 這樣,您可以在構建過程中自動獲得它,而不必擔心手動分配(或解除分配)它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.