我必須做一個程序計算我的新類型的符號,我遇到了一個我無法解決的問題。重載操作符不工作在方法
碼片:
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爲枚舉符號類型的。 +, - ,*和/運算符被重載爲兩個符號,並且工作正常,當我嘗試將它放入方法時,這隻會產生問題。
在主我
WyrAlg Wyr;
[it is initialized here with values]
Wyr.Oblicz();
什麼我得到的是:
[[email protected]:~/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外,insted的它只是在功能:
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;}
}
請問您是否可以編輯您的示例,以便在重現錯誤時儘量減少?你可以看到錯誤是在第32行,只有我不能在32行的地方,我不會在所有那些奇怪的名字和消息中尋找錯誤。 – iavr
考慮添加一個精簡版的「符號」以及 –
編輯,以使其更清楚,增加示例超載(他們工作正常) wonko,你是什麼意思,我應該包括? – user3142453