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

时间:2014-09-23 10:02:24

标签: c++ vector

我正在尝试构建一个函数,其中参数是对象向量的引用。在这种情况下,对象的名称是'obj',它是类'Example'的一个实例,它是vector类中定义的向量。对象具有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);           
    }

当我运行此操作时,我收到以下错误:

我在函数内部:“类型'示例'不提供下标运算符。” 我google了它,看到它与运算符重载和引用的使用有关。该解决方案可能与在函数内部取消引用我的对象引用有关,但我目前无法正确管理这个。

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

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

提前谢谢。

3 个答案:

答案 0 :(得分:1)

  

我想将对象矢量传递给函数作为参考

这样做:

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);
}

答案 1 :(得分:0)

我相信你希望你的功能

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

而不是

void calculate(Example &obj, int M)

答案 2 :(得分:0)

  

OBJ [I]

&#39;物镜&#39;不是一个数组。 您需要将其声明为:

void calculate(Example* obj, int M)

而不是

void calculate(vector<Example>& v)