бинарный '*': глобальный оператор не найден, который принимает тип «статистика» (или нет приемлемого преобразования) - PullRequest
2 голосов
/ 28 августа 2010

Я пытаюсь перегрузить мои операторы, это действительно просто класс, который содержит арифметические функции и последовательность переменных массива.

Но когда я перегружаю мой (*) оператор умножения, я получаю эту ошибку:

     binary '*' : no global operator found which takes type 'statistician' 
(or there is no acceptable conversion)

Это происходит, когда мой код пытается выполнить: s = 2*u; в main.cpp

, где s и u - классы статистики.

статистика = мой класс

(statisticsian.h)

class statistician  
{
... other functions & variables...

const statistician statistician::operator*(const statistician &other) const;

..... more overloads...

};

Любая помощь будет отличной, спасибо !!

Ответы [ 2 ]

5 голосов
/ 28 августа 2010

Объявите область имен operator*, чтобы у вас также был конвертируемый операнд на левой стороне, которая не относится к типу statistician.

statistician operator*(const statistician &left, const statistician &right) {
  // ...
}

Само собой разумеется, что вы должны удалить класс из класса, и вам нужен конвертирующий конструктор, чтобы получить int.

4 голосов
/ 28 августа 2010

Именно поэтому бинарные операторы, такие как * или +, не должны быть членами.

Если бы вы сделали s = u * 2, это сработало бы, предполагая, что у вас есть неявный конструктор для statistician, который принимает один аргумент int.Однако 2 * u не работает, потому что 2 не является statistician, а int не является классом с членом operator*.

Чтобы это работало правильно, вы должны определить не-член operator* и сделайте его friend из statistician:


statistician operator*(const statistician &left, const statistician &right);

Вам также нужно определить другие версии operator*, которые принимают целые числа (или любые другие типы, которые вы хотите бытьвозможность "умножения") или определения неявных конструкторов для statistician для включения неявного преобразования.

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