2015-02-03 4 views
-2

У меня есть быстрый вопрос. я пытаюсь сделать программу сложения векторов с некоторыми функциями, но когда я запускаю это быстро, чтобы проверить число на выходе еще 0.Передача структурных переменных между функциями

void input(struct vectors v1, struct vectors v2); 
void addition (struct vectors v1, struct vectors v2); 

struct vectors { 
    int x; 
    int y; 
    }v1, v2; 

    int main(int argc, const char * argv[]) { 


    input(v1, v2); 
    addition(v1, v2); 
    } 


    void input(struct vectors v1,struct vectors v2){ 

    cout << "Input x and y componenets of vector 1" << endl; 
    cin >> v1.x; 
    cin >> v1.y; 
    cout << "Input x and y componenets of vector 2" << endl; 
    cin >> v2.x; 
    cin >> v2.y; 

    } 

    void addition (vectors v1, vectors v2){ 

    int xsum = v1.x +v2.x; 
    int ysum = v1.y +v2.y; 

    cout << "sum of the x variables is " << xsum << endl << "sum of the y variables is " << ysum <<endl; 

    } 
+2

C++ является передача по значению. Вы написали свой код, как если бы он проходил по ссылке. – juanchopanza

ответ

2

В функции input, вы изменяете только копию входной аргумент. Чтобы увидеть изменения, видимые в вызывающей функции, передайте аргументы по ссылке.

void input(struct vectors& v1,struct vectors& v2){ 

    cout << "Input x and y componenets of vector 1" << endl; 
    cin >> v1.x; 
    cin >> v1.y; 
    cout << "Input x and y componenets of vector 2" << endl; 
    cin >> v2.x; 
    cin >> v2.y; 

} 

Кроме того, так как вы используете C++, вы можете просто использовать:

void input(vectors& v1, vectors& v2){ 
+0

Спасибо, но когда я делаю это, я получаю ошибку компоновщика. Я предполагаю, что я должен изменить вызов функций, но можете ли вы мне помочь? –

+0

Измените объявление в соответствии с определением. –

0

В настоящее время, вы прохождения структур по значению, поэтому при вызове функции, копия структуры является и в функции вы только изменяете копию. Вместо этого, пройти по ссылке:

void input(vectors& v1, vectors& v2) { 

Кроме того, в другой функции, чтобы избежать ненужной копии, вы можете передать постоянной структур справки:

void addition(const vectors& v1, const vectors& v2) { 
Смежные вопросы