我正在做一个作业,涉及到制作一个程序,交互/修改学校成绩(添加,改变标记)。一些函数将等级从int更改为字母等级,另一个函数则更改为GPA版本(1 - 4)。
以下是作业表上列出的约束条件的摘要:
- 使用指定的重载运算符
- 到目前为止,代码中的每个重载运算符都是必需的
- 提供主. cpp文件;请勿修改。**
- 根据指示返回类型
除了执行到main()中的最后两个语句之外,我的代码还能正常工作:
cout << (val += n) << endl;
cout << (val += k) << endl;
我得到了这些错误:
more than one conversion function from "sdds::Mark" to a built-in type applies:
function "sdds::Mark::operator int()" (declared at line 17 of "/Users/...)
function "sdds::Mark::operator double()" (declared at line 21 of "/Users/..)
function "sdds::Mark::operator char()" (declared at line 22 of "/Users/..)
more than one conversion function from "sdds::Mark" to a built-in type applies:
(same as above)
- 如何在不修改main的情况下修复歧义?* * 顺便说一句,注解是我从作业单上复制的一些说明,但不是所有的说明都在注解中。
- Main. cpp**
#include <iostream>
#include "Mark.h"
using namespace std;
using namespace sdds;
int main()
{
Mark n(25), k(200);
int val = 60;
cout << "int += Mark ..." << endl;
cout << (val += n) << endl;
cout << (val += k) << endl;
return 0;
}
- 标记. h**
namespace sdds {
class Mark
{
int markVal;
void setEmpty();
public:
Mark();
Mark(int val);
bool markIsValid();
operator int();
Mark &operator+=(int addVal);
Mark &operator=(int newMark);
operator double();
operator char();
};
}
*CORRECT * 最后两行输出(不是我的):
int += Mark
140
140
1条答案
按热度按时间hivapdat1#
正如已经说过的那样,声明所有的转换算子都是显式的:
然后添加重载的
operator+=
,该int
位于左手:你会得到进一步的错误:
您需要重载流输出操作符:
或转换总和:
我得到了什么