繁体   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