Ошибки, баги, вопросы - страница 1586

 

Ошибка компиляции

class A { public:
        void operator[]( int i ) {}
};
class B { public:
        B() : a( new A ) {}
        ~B() { delete a; }
        A *a;
        void f() const { a.operator[]( 0 ); } //нормально
        void g() const { a[ 0 ]; }            //error: call non-const method for constant object
        void h() const { (*a)[ 0 ];           //error: call non-const method for constant object
};
 
Там, где "нормально", должна быть ошибка. Оператор же определен, не как const.
 
Anton Zverev:
Там, где "нормально", должна быть ошибка. Оператор же определен, не как const.
"Психиатр" сегодня получает двойку
 
A100:
"Психиатр" сегодня получает двойку
class A { public:
        void operator[]( int i ) const {} // const добавил
};
class B { public:
        B() : a( new A ) {}
        ~B() { delete a; }
        A *a;
        void f() const { a.operator[]( 0 ); } // нет ошибки
        void g() const { a[ 0 ]; }            // нет ошибки
};
 
Anton Zverev:
Про десктопную же версию пятерке говорим. Там нет авиарежима.
Причём терминал?! На компьютере нужно отключить интернет, а самое простое действие - это включение режима "В самолёте". Ну или зайти в настройки и отключить сетевой адаптер.
 
Anton Zverev:

Учите матчать

 
Karputov Vladimir:
Причём терминал?! На компьютере нужно отключить интернет, а самое простое действие - это включение режима "В самолёте". Ну или зайти в настройки и отключить сетевой адаптер.
А где такой режим в Win7?! Извините, но я очень слабый юзер.
 
Anton Zverev:
А где такой режим в Win7?! Извините, но я очень слабый юзер.
Win7? Не знаю такой :) .У меня WIndows 10.
 
A100:
Учите матчать
Я бы рад учиться, но гугл не понимает, в чем ошибся. Могли бы Вы кратко изложить суть моего непонимания? Я вижу ошибку компилятора в Вашем примере в строке "нормально". По моему разумению, компилятор должен был ругнуться.
 
Anton Zverev:
Я бы рад учиться, но гугл не понимает ...
Настоящие суровые мужики спрашивают не у гугла, а у ясеня :))
Причина обращения: