在主方法中将3D矢量乘以标量

时间:2016-11-08 16:48:34

标签: c++ vector

我对C ++很新,我试图用矢量乘以一个标量。

vector3D.h文件中的代码:

//multiply this vector by a scalar
Vector3D operator*(float num) const
{
    return Vector3D(x * num, y * num, z * num);
}

主要功能:

int scalar = 2;
Vector3D*vector1 = new Vector3D(1,2,4);
cout << " Vector multiplcation by scalar ";
cout << vector1*scalar;

我明白这是完全错误的,但我不知道如何使用上述功能。

给出的错误是表达式必须具有算术或未结合的枚举类型。

由于

2 个答案:

答案 0 :(得分:2)

HolyBlackCat有一些好的评论,你应该遵循它们。以下是最低工作示例:

#include <iostream>
using namespace std;

class Vector3D {
public:
    Vector3D(double x, double y, double z): x(x), y(y), z(z) {}

    Vector3D operator*(double num) const {
        return Vector3D(x*num, y*num, z*num);
    }

    void print() {
        cout << "(" << x << ", " << y << ", " << z << ")" << endl;
    }

private:
    double x, y, z;
};


int main() {
    int scalar = 2;
    Vector3D vector1(1, 2, 4);
    cout << "Vector multiplcation by scalar: ";
    Vector3D vector2 = vector1*scalar;
    vector2.print();
}

注意额外的print()方法。如果你想做一些像cout&lt;&lt; vector1 *标量,那么你还需要做一些额外的工作来定义ostream如何处理Vector3D对象。

答案 1 :(得分:1)

您在表达式中*之前缺少解除引用运算符vector1。你需要它,因为vector1本身不是Vector3D,它只是一个指针。

另外,你应该记住,С++不像java。在您的情况下new完全冗余且不安全(如果您忘记删除它可能导致内存泄漏)。简单Vector3D vector1(1, 2, 4);就足够了。此外,如果您使用此替代方案,则不需要额外的*