gpt4 book ai didi

c++ - 重载运算符不在方法中工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:21 26 4
gpt4 key购买 nike

我必须编写一个程序来计算我的新类型的符号,但我遇到了一个我无法解决的问题。

代码片段:

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 是 enum Symbol 类型。+、-、* 和/运算符为两个符号重载并且工作正常,只有当我尝试将其放入方法中时才会出现问题。

主要有

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 之外,它只是在函数中:

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++ - 重载运算符不在方法中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com