在C++中类外定义成员函数

4

可能是重复问题:
类外运算符重载

我不太擅长C++,但被分配创建一个使用大量运算符重载的自定义向量类。 我很难理解如何完成其中之一。 该类应提供以下功能:

v3 = v2 * 2.0f;
v3 = 2.0f * v2;

我通过重载*运算符成功实现了第一个,但我不确定如何完成第二个。我知道我需要再次重载*运算符,但我认为它不应该在我的向量类中。有一天我缺席了教授讲课的日子,之后我和他谈论时他提到这需要在类外进行。问题是我不知道这将如何工作。任何指导都将是很好的!

编辑 -

@Fede_Reghe 这对我来说是有道理的,但当我添加它时,现在编译器给我返回这个错误: Vector.h:64: error: passing ‘const Vector’ as ‘this’ argument of ‘float Vector::operator’ discards qualifiers

在头文件中,我有这两行代码,它们涉及到*的重载。 Vector operator * (float); friend Vector operator*(float, const Vector&);

然后我重载了[],以便返回x、y或z值的浮点数。在头文件中看起来像这样: float operator [] (int);

在类外,我定义了如下的友元*重载:

Vector operator * (float f,const Vector& v2)
 {
    float newX = v2[0] * f;
    float newY = v2[1] * f;
    float newZ = v2[2] * f;
    Vector newVector(newX, newY, newZ);
    return newVector;
 }

我不完全理解这个错误信息的含义。

2个回答

3

你需要在类外重载运算符,并将其声明为该类的友元。

例如:

class Vector {
     // ...
     friend Vector operator*(float, Vector);
};

Vector operator*(float num1, Vector num2)
{
    // ...
} 

2
你需要使用带有两个参数的operator *()实现。这里是一个使用operator +()的示例,你可以推广使用。 这里提供了示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接