运算符重载中没有运算符'=='匹配

时间:2018-03-06 12:02:32

标签: c++ struct operator-overloading overloading

我正在研究“Roman to int”算法,我的代码如下。我收到一个错误:

no operator "==" matches these operands -- operand types are: char == const Solution::symbol.

有人可以帮我修复代码吗?

// solution.h
#include <string>
using namespace std;

class Solution {
  private:
    struct symbol {
      char upperCase;
      char lowerCase;
      bool operator ==(char ch) {
        return ch == upperCase || ch == lowerCase;
      };
    };
    static constexpr symbol one {'I', 'i'};
    static constexpr symbol five {'V', 'v'};
    static constexpr symbol ten {'X', 'x'};
    static constexpr symbol fifty {'L', 'l'};
    static constexpr symbol hundred {'C', 'c'};
    static constexpr symbol fiveHundred {'D', 'd'};
    static constexpr symbol thousand {'M', 'm'};
  public:
    bool romanToInt() {
      char ch = 'I';
      ch == one; // ERROR: no operator "==" matches these operands -- operand types a re: char == const Solution::symbol
      one == ch; // ERROR: no operator "==" matches these operands -- operand types a re: const Solution::symbol == char
    };
};

// main.cpp
#include <iostream>
#include "../Header Files/solution.h"
using namespace std;

int main() {
  Solution solution;
  solution.romanToInt();

  return 0;
}

1 个答案:

答案 0 :(得分:2)

至少声明操作符

  bool operator ==(char ch) const {
    return ch == upperCase || ch == lowerCase;
  };

并使用

return one == ch;