[英]Using “push_back” for vector with “get” function C++
我有一個名為“Region”的 class,我有一個名為“Map”的 class。 “地圖”class 有一個名為“regions”的“Region *”類型向量作為成員。 在“地圖”class 的 .cpp 文件中,我有一個“getRegions”function,它返回這個“區域”向量。
在main.cpp中,我初始化了一個名為“australia”的“Region *”,然后嘗試使用“getRegions”function調用“push_back”function為vector。 我以前從未遇到過使用“push_back”的問題,但是當我測試這個“Region *”是否真的在“regions”向量中時,它總是以空的形式返回。
CLion 編譯並運行程序沒有任何錯誤。 將“push_back” function 與“get” function 一起調用是錯誤的嗎?
這是驅動程序代碼。
int main() {
Map map;
Region *australia;
map.getRegions().push_back(australia);
if (map.getRegions().empty()) {
std::cout << "Empty"; //always prints this for some reason, even though I just pushed it back
} else {
std::cout << "Not Empty";
}
return 0;
}
沒有看到你所有的代碼很難說,但根據你顯示的代碼和描述的行為,我猜你的 function 看起來像:
auto Map::getRegions() -> std::vector<Region>
{
// ...
return regions;
}
這意味着您正在制作向量的副本,並且您正在push_back
到副本上。
相反,你需要這樣寫:
auto Map::getRegions() -> std::vector<Region> &
{
// ...
return regions;
}
以便您返回對regions
成員的引用。
閱讀按值傳遞、按引用傳遞和按指針傳遞的概念。 您的 function getRegions
可能正在按值返回成員,這意味着您正在創建一個臨時副本,並將australia
添加到副本中,而不是實際成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.