在C++中将对象向量的引用作为参数传递

Passing reference of vector of objects as arguments in C++

本文关键字:引用 参数传递 向量 C++ 对象      更新时间:2023-10-16

我正在尝试构建一个函数,其中参数是对对象向量的引用。在这种情况下,对象的名称是"obj",它是类"Example"的实例,并且是向量类中定义的向量。对象具有像x、y和z这样的成员。

我尝试传递引用的原因是,我想通过在函数内部使用obj.x和obj.y来更改obj.z的值。

    #include <vector>
    #include <iostream>
    using namespace std;
    class Example{
    public:
        double x;
        double y;
        double z;
        Example()
        : x(0.0),y(0.0){
        }
    };
    void calculate(Example &obj, int M) {
        for(int i = 0; i < M; i++) {
            obj[i].z = obj[i].x * obj[i].y;
        }
    }
    int main() {
        vector<Example> obj;
        int N = 10;
            calculate(obj, N);           
    }

当我运行这个程序时,我会得到以下错误:

在我拥有的函数内部:"类型'Example'不提供下标运算符。"我在谷歌上搜索了一下,发现它与运算符重载和引用的使用有关。这个解决方案可能与取消引用函数内部的对象引用有关,但我目前无法管理这个。

第二个错误在函数之外,在main()中,我调用函数的那一行:"没有匹配的函数可以调用‘calculate’"。在这里,我假设这个错误与obj不仅仅是一个对象,而是一个对象向量这一事实有关,所以我应该以某种方式改变这个论点。但到目前为止,我还没能纠正这一点。

总之,我想把一个对象向量作为引用传递给一个函数,因为我想能够在函数内部更改对象的一个成员。

提前谢谢。

我想把一个对象向量传递给一个函数作为参考

这样做:

void calculate(vector<Example> &obj) {
    for(int i = 0; i < obj.size(); i++) {
        obj[i].z = obj[i].x * obj[i].y;
    }
}
int main() {
    vector<Example> obj;
    // put some values into it...
    calculate(obj);
}

我相信你希望你的函数是

void calculate(vector<Example> &obj, int M)

而不是

void calculate(Example &obj, int M)

obj[i]

"obj"不是数组。您需要将其声明为:

void calculate(Example* obj, int M)

更确切地说是

void calculate(vector<Example>& v)