簡體   English   中英

重載的運算符無法在方法中使用

[英]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屬於枚舉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();
}

也許您在結構定義之后聲明了運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM