-1

我想将 v2 添加到 v1。我的成员功能正在工作,但免费功能却没有。我该如何解决这个问题,谢谢。

当我编译时: clang++ -std=c++2a hw1.cpp -o hw1 并运行: ./hw1

给出 5 作为输出。

#include <iostream>

using namespace std;

struct Vector3D
{
    int x;
    int y;
    int z;

    Vector3D(int x_, int y_, int z_)
    {
        x = x_;
        y = y_;
        z = z_;
    }

    void add(Vector3D v)
    {
        x = x + v.x;
        y = y + v.y;
        z = z + v.z;
    }

    ~Vector3D()
    {     
    }
};

void add_free(Vector3D v1, Vector3D v2)
{
    v1.x = v1.x + v2.x;
    v1.y = v1.y + v2.y;
    v1.z = v1.z + v2.z;
}

int main(int argc, char const *argv[])
{
    Vector3D v1(1, 2, 3);
    Vector3D v2(4, 5, 6);
    Vector3D v3(7, 8, 9);
    
    add_free(v1, v2);
    v1.add(v2);
    cout << v1.x << endl;
    
    return 0;
}

4

1 回答 1

1

您需要Vector3D通过非常量引用传递您将修改的内容:

void add_free(Vector3D &v1, Vector3D v2)
//                     ^ HERE

您也可以使用v1.x += v2.x而不是v1.x = v1.x + v2.x;.

于 2020-12-01T05:04:25.043 回答