使用operator ==进行结构重载

时间:2018-03-06 09:13:00

标签: c++ struct operator-overloading

我编写了将罗马变换为整数的算法(下面的代码),我得到错误'这个函数的参数太多了',但是我需要两个参数来进行比较。有人知道如何修复我的代码吗?

#include <iostream>
using namespace std;

int main() {
  class Solution {
  private:
    struct symbol {
      char upperCase;
      char lowerCase;
      bool operator ==(char& a, symbol& b) { // ERROR: too many parametres for this function 
        return a == b.upperCase;
      };
    };
    const symbol one {'I', 'i'};
    // ...
    const symbol thousand {'M', 'm'};
  public:
    int romanToInt(string s) {
    // ...
    }
  };
  return 0;
}

2 个答案:

答案 0 :(得分:3)

运算符的左参数是自动Microsoft.Cognitive.LUIS对象,您不需要在参数列表中指定这两个参数。

this

但是,这只允许bool operator== (char& a) { return a == upperCase; } ,而不是symbol == char。对于后者,您需要常规函数,而不是成员函数。您需要将此声明为char == symbol friend,以便它可以访问私有Solution类。

symbol

答案 1 :(得分:2)

你最好为if(modelSalesAct.getStatus().equals("2")) { ivStatus.setImageResource(context.getResources().getDrawable(R.drawable.ic_black)); } 个对象设置一个重载,为symbol设置另一个重载:

char

在重载等于运算符时,将针对当前实例检查唯一参数(即 bool operator ==(symbol& b) { return (b.upperCase==upperCase); } bool operator ==(char& a) { return a == upperCase; } )。