我对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;
我明白这是完全错误的,但我不知道如何使用上述功能。
给出的错误是表达式必须具有算术或未结合的枚举类型。
由于
答案 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);
就足够了。此外,如果您使用此替代方案,则不需要额外的*
。