簡體   English   中英

對帶有“get”的向量使用“push_back” function C++

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM