2013-12-07 1 views
0

У меня проблема. Я внедрил пользовательскую функцию operator* в качестве функции-члена.C++ Перегрузка оператора, не видя других операторов

В заголовке:

class Matrix 
{ 
public: 
Matrix operator*(int arg); //(1) 
... 
} 

Matrix operator*(int a, const Matrix& m) 
{ 
    return m * a; //(2) 
} 

(1) Я могу сделать это в main.cpp:

Matrix a = Matrix::GetRandom..... 
Matrix b = a * 2; 

(2) На этой линии, я получаю сообщение об ошибке компилятора:

IntelliSense: no operator "*" matches these operandsnoperand types are: const Matrix * int

Как исправить это?

+0

Вы также можете написать оба оператора, как (не член) другу функции 'оператор друга Matrix (Матрица, целое); и' друг матричного оператора (междунар, Matrix); ' , Это сохраняет оба симметричных, и они объявляются рядом друг с другом. – dyp

ответ

3

m является const, поэтому только const метод может быть вызван на него. Сделать Matrix::operator* функцию в const члена:

Matrix operator*(int arg) const; 
1

Вы упускаете в вашем объявлении оператора перегружать const:

Matrix operator*(int arg) const; 
Смежные вопросы