【问题标题】:Operator Overloading in C++: unqualified-id error [duplicate]C++ 中的运算符重载:不合格 ID 错误 [重复]
【发布时间】:2021-02-13 08:00:46
【问题描述】:

我们刚开始在我的计算模块中学习类和运算符重载,我对给出的示例之一有疑问:

 #include <iostream>
using namespace std;

int main()
{
    class PositivePoint
    {
        // Must return PositivePoint object by value
        PositivePoint operator+(const PositivePoint& pSrc);
    };

    PositivePoint PositivePoint::operator+(const PositivePoint& pSrc)
    {
        Positive Point ret;
        ret.mX = mX + pSrc.mX;
        ret.mY = mY + pSrc.mY;
        return ret;
    }

    // Return success
    return 0;
}

我不断收到错误“unqualified-id in declaration before '(' token。我不明白为什么会这样,因为我认为在上面的示例中正确定义了运算符重载。

【问题讨论】:

  • 您的operator+ 定义很好。只是你不能在其他函数中定义函数。将类和成员函数定义移到main之外。

标签: c++ class operator-overloading


【解决方案1】:

您的代码几乎没问题,至少在运算符的语法上是这样。 您需要将类和运算符移出主要功能... 定义 mX, My 并更正为 ret 声明的错字

在那之后我测试并工作了......

#include <iostream>
using namespace std;
class PositivePoint {
public:
    int mY;
    int mX;
    // Must return PositivePoint object by value
    PositivePoint operator+(const PositivePoint& pSrc);
};

PositivePoint PositivePoint::operator+(const PositivePoint& pSrc) {
    PositivePoint ret;
    ret.mX = mX + pSrc.mX;
    et.mY = mY + pSrc.mY;
    return ret;
}

int main() {
    PositivePoint a;
    a.mX = 1;
    a.mY = -2;
    
    PositivePoint b;
    b.mX = 3;
    b.mY = 5;
    
    PositivePoint c = a + b;
    std::cout << "Hello World!"<< std::endl;
    std::cout << "c.X: " << c.mX << std::endl;
    std::cout << "c.Y: " << c.mY << std::endl;
 
    // your code goes here
    return 0;
}

【讨论】:

  • 非常感谢!现在它变得更有意义了(我们在课堂上给出的例子并不是很能说明问题)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2016-06-27
相关资源
最近更新 更多