簡體   English   中英

為什么我不能在我的矢量中添加項目?

[英]Why can't I add items into my vector?

我在一個類中有以下代碼:

    class A
    {
        std::vector<Parameter*> params;
        std::vector<Parameter*> getParamVector() {return params;}
        void addOneParam(Parameter* param)
        {
            params.push_back(param);
        }
    }

在另一個類B類中 ,我嘗試通過執行以下操作將項添加到params向量中:

classA_Ptr->getParamVector().push_back(aParamPtr);

但是在上面調用之后, 參數矢量的大小仍為0。

我必須添加上面的addOneParams(Parameter* param)方法來將項添加到params向量中。 為什么?

getParamVector()返回params副本 因此,當你將push_back添加到它上面時,你會添加一個立即被刪除的臨時vector 這絕不會影響params的大小。

如果您希望能夠通過getParamVector()執行此操作,則必須返回對params引用

std::vector<Parameter*>& getParamVector() {return params;}
                      ^^^

你應該通過引用或指針返回指出。

std::vector<Parameter*>& getParamVector() { return params; }

要么

std::vector<Parameter*>* getParamVector() { return &params; }

但是,這是一個真正的問題:如果你已經有一個可以添加一個參數的方法,為什么需要調用getParamVector()。push_back()。

相反,你可以做classA_ptr-> addOneParam(p)。

編輯:對我來說,addOneParam()強制數據隱藏比獲取內部向量的引用/指針更好。

如果存儲參數的數據結構發生變化,則還需要修改調用者。

使用addOneParam(),調用者是絕緣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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