我的一项考试运动任务有一点问题。这是一段文字:
MyFloat类具有一个私有变量float num。您必须编写启用下一行代码的方法:
MyFloat x = 3.5;
MyFloat y = x + 3.2
浮点z = 3.4 + y
我写这段代码:
#include <iostream>
#include <Windows.h>
using namespace std;
class MyFloat
{
float num;
public:
MyFloat(float n)
{
num = n;
}
MyFloat operator+(MyFloat x)
{
float result;
result = x.num + this->num;
return result;
}
};
int main()
{
MyFloat x = 3.75;
MyFloat y = x + 3.2;
float z = 3.4 + y;
system("PAUSE");
}
我在这一行出现错误:
float z = 3.4 + y;
它说:
错误C2677:二进制'+':找不到类型为'MyFloat'的全局运算符(或者没有可接受的转换)
我该怎么办?如何解决这个问题呢???
最佳答案
这可以是一个解决方案:
class MyFloat
{
float num;
public:
MyFloat(float n)
{
num = n;
}
operator float() const {
return num;
}
};
int main()
{
MyFloat x = 3.75;
MyFloat y = x + 3.2f;
float z = 3.4f + y;
}
最初,我还打算将
MyFloat operator+(MyFloat, MyFloat)
设置为非成员朋友函数,但仍然无法实现float z = 3.4 + y;
编译。原因是
3.4 + y
将是MyFloat
类型,因此,除非您提供从float z
到MyFloat
的转换运算符,否则您不能将其分配给float
。但是,3.4f + y
变得模棱两可(至少在VS 2010中如此),因为它可以调用MyFloat operator+(MyFloat, MyFloat)
或可以将y
转换为float
并将内置运算符+
用于float
。关于c++ - 在C++中重载operator +,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18641212/