Я написал следующий код и столкнулся с проблемой перегрузки оператора []. Вот код для testmain.cpp:Проблемы с оператором перегрузки []
#include"test.hpp"
int main()
{
C tab = C(15);
bool b = tab[2];
return 0;
}
А вот файл заголовка test.hpp:
#ifndef _test_
#define _test_
class C
{
friend class ref;
int s;
public:
class ref
{
public:
bool v;
ref();
ref(bool x);
ref& operator = (ref a);
ref& operator = (bool x);
};
C();
C(int a);
bool operator[] (int i) const ;
ref operator[] (int i);
};
#endif ///_test_
При попытке компиляции кода, я получаю следующее сообщение об ошибке:
testmain.cpp: In function ‘int main()’:
testmain.cpp:6:16: error: cannot convert ‘C::ref’ to ‘bool’ in initialization
Похоже, что компилятор автоматически предполагает, что мой оператор индексирования [] всегда возвращает объект типа ref и игнорирует оператор [], который возвращает переменную типа boolean. Можно ли исправить код так, чтобы компилятор «знал», когда использовать соответствующий перегруженный оператор []?
Компилятор пытается определить, какую функцию вызывать, основываясь исключительно на 'tab [2]'. Он не смотрит на часть 'bool b =' до тех пор, пока впоследствии. –