重载操作符在方法中不工作
Overloaded operator not working in method
我必须编写一个程序来计算我的新类型的符号,并且我遇到了一个我无法解决的问题。
代码块:
typedef struct{
Symbol a1, a2, w_wcz, w_ok;
char oper, rown;
int Oblicz(){
if(rown != '='){
cerr << "Blad, brak symbolu rownosci!" << endl;
return 0;}
switch(oper){
case '+':
w_ok=a1+a2;
case '-':
w_ok=a1-a2
case '*':
w_ok=a1*a2;
case '/':
w_ok=a1/a2;
default:
cerr << "Blad, nieznany operator!" << endl;
return 0;}
}
}WyrAlg;
a、b、c、d、e为枚举符号类型。+, -, *和/操作符为两个符号重载并且工作正常,只有当我试图将其放入方法中时才会出现问题。
main中有
WyrAlg Wyr;
[it is initialized here with values]
Wyr.Oblicz();
我得到的是:
[tjakubo2@diablo:~/kpo/lab04]$ make
g++ -pedantic -Wall -o dzialok.out dzialaniamod.cpp
dzialaniamod.cpp: In member function 'int<anonymous struct>::Oblicz()':
dzialaniamod.cpp:32:8: error: invalid conversion from 'int' to 'Symbol' [-fpermissive]
w_ok=a1+a2;
^
dzialaniamod.cpp:40:12: error: invalid conversion from 'int' to 'Symbol' [-fpermissive]
w_ok=a1-a2;
^
dzialaniamod.cpp:48:12: error: invalid conversion from 'int' to 'Symbol' [-fpermissive]
w_ok=a1*a2;
^
dzialaniamod.cpp:56:12: error: invalid conversion from 'int' to 'Symbol' [-fpermissive]
w_ok=a1/a2;
^
*** Error code 1
make: Fatal error: Command failed for target `dzialok.out'
我不知道发生了什么,需要帮助。提前感谢!
编辑:包括重载操作符:(可能不清楚,但它工作良好)
enum Symbol {e,a,b,c,d};
Symbol tab_dod[5][5]= {{e,a,b,c,d},{a,b,c,d,e},{b,c,d,e,a},{c,d,e,a,b},{d,e,a,b,c}};
Symbol operator + (Symbol x, Symbol y){
return tab_dod[x][y];
}
澄清编辑2:函数版本的工作正常,如果你需要的话,我把它粘贴在这里:唯一的区别是w_ok在WyrAlg之外,而不是在function中:
int ObliczWyr(WyrAlg Wyr){
Symbol w_ok;
if(Wyr.rown != '='){
cerr << "Blad, brak symbolu rownosci!" << endl;
return 0;}
switch(Wyr.oper){
case '+':
w_ok=Wyr.a1+Wyr.a2;
[stuff]
return 2;}
case '-':
w_ok=Wyr.a1-Wyr.a2;
[stuff]
return 2;}
case '*':
w_ok=Wyr.a1*Wyr.a2;
[stuff]
return 4;}
case '/':
w_ok=Wyr.a1/Wyr.a2;
[stuff]
return 4;}
default:
cerr << "Blad, nieznany operator!" << endl; // jesli nieznany operator
return 0;}
}
代码编译成功
#include <iostream>
enum Symbol {e,a,b,c,d};
Symbol tab_dod[5][5]= {{e,a,b,c,d},{a,b,c,d,e},{b,c,d,e,a},{c,d,e,a,b},{d,e,a,b,c}};
Symbol operator + (Symbol x, Symbol y)
{
return tab_dod[x][y];
}
int main()
{
typedef struct
{
Symbol a1, a2, w_wcz, w_ok;
char oper, rown;
int Oblicz()
{
switch(oper)
{
case '+':
w_ok=a1+a2;
break;
default:
std::cerr << "Blad, nieznany operator!" << std::endl;
break;
}
return 0;
}
} WyrAlg;
WyrAlg alg;
alg.a1 = e;
alg.a2 = a;
alg.oper = '+';
alg.Oblicz();
}
可能在结构定义之后声明了操作符
相关文章:
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- Poco 库 PUT 方法未按预期工作,尽管主机、方法、内容类型设置正确
- std::bind,无法让具有单个参数的方法工作
- 私有变量无法正常工作的C++getter方法(只有Java经验)
- 虚拟基类在内部如何工作?编译器如何解析对基方法的调用?
- 让类与运算符一起工作更简单的方法
- 找不到使保证返回值优化工作的方法
- C++ set_difference方法未按预期工作
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- C 方法无法工作
- 我是否应该在构造函数或成员方法中进行大量初始化工作
- 请告诉我在巴泽尔拥有多平台工作空间的更好方法
- 这种奇怪的 I/O 方法是如何工作的?
- 在 Xcode 中工作的 CMake 中启用地址清理器的正确方法是什么
- 在Qt中使用工作线程将数据写入文件的正确方法是什么?
- 我试着了解方法覆盖是如何工作的,不知道为什么输出 2
- 我的重载后增量方法无法按预期工作。为什么?
- 无法使方法存在检测机制正常工作
- 在多线程中使用curl句柄的错误工作方法的替代方法