重载操作符在方法中不工作

Overloaded operator not working in method

本文关键字:工作 方法 操作符 重载      更新时间:2023-10-16

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

代码块:

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

可能在结构定义之后声明了操作符