2014-03-27 30 views
2

我必須做一個程序計算我的新類型的符號,我遇到了一個我無法解決的問題。重載操作符不工作在方法

碼片:

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;} 

} 
+1

請問您是否可以編輯您的示例,以便在重現錯誤時儘量減少?你可以看到錯誤是在第32行,只有我不能在32行的地方,我不會在所有那些奇怪的名字和消息中尋找錯誤。 – iavr

+0

考慮添加一個精簡版的「符號」以及 –

+0

編輯,以使其更清楚,增加示例超載(他們工作正常) wonko,你是什麼意思,我應該包括? – user3142453

回答

1

此代碼編譯成功

#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(); 
} 

也許你在結構定義之後聲明瞭運算符。

+0

重寫,整理,工作。我不知道是什麼導致了它,而使它工作的第一件事情之一是把+運算符重載在所有東西之前,並且在+操作中仍然出現錯誤。大概搞砸了,或者我只是愚蠢的。不管怎麼說,多謝拉! – user3142453