Перегрузка оператора C # не работает - PullRequest
2 голосов
/ 15 августа 2011

Это мой код:

    public static Symbol operator + (Symbol op1, Symbol op2)
    {
        Symbol op3 = new Symbol() { op3.type = Type.Value };

        object o1 = null;
        object o2 = null;

        object replacement;
        try
        {
            o1 = op1.value.Value;
            o2 = op2.value.Value;

            if (o1 is string || o2 is string)
                replacement = o1.ToString() + o2.ToString();
            else if (o1 is double && o2 is double)
                replacement = (double)o1 + (double)o2;
            else
                throw new Exception("only to be caught");
        }
        catch
        {
            op3.type = Type.Invalid;
            op3.value = null;
            replacement = op3;
        }
        Debug.WriteLine(String.Format("ExpressionEvaluator {0} + {1} = {2}", o1, o2, replacement));

        op3.value = new Naked(replacement, typeof(bool));
        return op3;
    }

Я выдаю следующую ошибку: Одним из параметров бинарного оператора должен быть содержащий тип

Есть идеи, что не так?

Ответы [ 2 ]

6 голосов
/ 15 августа 2011

Судя по ошибке, вы объявили operator+ внутри типа, отличного от Symbol. C # требует, чтобы по крайней мере один из типов, перечисленных в бинарном операторе, был типом, в котором бинарный оператор определен

Обновление

Как указал Эрик, когда декларирующим типом является struct (названный, скажем, S), тогда один из операндов должен быть S или S?

6 голосов
/ 15 августа 2011

Это означает, что оператор должен быть объявлен в классе Symbol.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...