【问题标题】:Function outside of class in C++ [duplicate]C ++中类外的函数[重复]
【发布时间】:2012-02-17 05:50:54
【问题描述】:

可能重复:
Operator overloading outside class

我不太擅长 C++,但我的任务是创建一个使用大量运算符重载的自定义 Vector 类。我很难掌握如何做其中之一。 该类应提供以下功能:

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

我通过重载 * 运算符成功实现了第一个。我不确定如何进行第二个。我知道我需要再次重载 * 运算符,但我认为它不应该在我的向量类中。我的教授解释的那天我没上课,后来我和他谈话时,他提到它需要在课外。问题是我不知道这将如何工作。任何指导都会很棒!

编辑-

@Fede_Reghe 这对我来说很有意义,但是当我添加它时,我现在从编译器收到此错误: Vector.h:64:错误:将“const Vector”作为“float Vector::operator”的“this”参数传递会丢弃限定符

在标题中,这两行引用了 * 重载。 向量运算符 * (float); 朋友向量运算符*(float, const Vector&);

然后我重载了 [] 以便它返回 x、y 或 z 值的浮点数。在标题中看起来像这样: 浮点运算符 [] (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;
 }

我不完全理解错误消息的含义。

【问题讨论】:

    标签: c++


    【解决方案1】:

    您应该在类外重载运算符并将其声明为类的朋友。 例如:

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

    【讨论】:

      【解决方案2】:

      您需要operator *() 的两个参数实现。 Here 是使用 operator +() 执行此操作的示例,您可以对其进行概括。

      【讨论】:

        猜你喜欢
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-02
        相关资源
        最近更新 更多