2014-09-23 48 views
1

我想構建一個函數,其中參數是對象的向量的引用。在這種情況下,對象的名稱是'obj',它是類'Example'的一個實例,它是vector類中定義的一個向量。對象有像x,y和z這樣的成員。在C++中傳遞對象的向量作爲參數

我試着用傳遞引用的原因是因爲我想通過在函數內部使用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);   
    } 

當我運行它,我得到以下錯誤:

裏面的功能我:「類型‘樣本’不提供標運算符。」 我googled了它,看到它與運算符重載和引用的使用有關。該解決方案可能與在函數內部取消引用我的對象引用有關,但目前我無法正確管理此對象。

而第二個錯誤是在函數的外部,在main()函數內部的那一行:「沒有匹配函數調用'calculate'」。 在這裏,我假設這個錯誤與obj不僅僅是一個對象而且是一個對象的矢量有關,所以我應該改變這個參數。但是至今我還沒有能夠糾正這個問題。因此,總而言之,我想將一個對象向量傳遞給一個函數作爲參考,因爲我希望能夠更改函數內部的對象成員。

預先感謝您。

回答

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

這就像一個魅力,謝謝你! :) – ozdm 2014-09-23 10:16:12

0

我相信你想你的函數是

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

,而不是

void calculate(Example &obj, int M) 
+0

謝謝非常多 – ozdm 2014-09-23 10:16:45

0

OBJ [I]

'OBJ' 是不是數組。 你需要將其申報爲:

void calculate(Example* obj, int M) 

而且相當

void calculate(vector<Example>& v) 
+0

非常感謝您的回答 – ozdm 2014-09-23 10:17:18

相關問題