![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Litkevich Yuriy |
![]()
Сообщение
#1
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Помогите понять смысл ошибки компилятора.
Есть такой код: При компиляции получаю такое сообщение об ошибке:
|
|
|
kwisp |
![]()
Сообщение
#2
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
так все ж написано.
приведи весь код функции и объявление в заголовочном файле. с квалификатором конст ты что то намутил. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
объявление в заголовочном файле. квалификатора const ни где нетconst MyClass' as `this' argument of мне вот совершенно не понятно причём здесь const MyClass', да ещё и "как `this' аргумент" в функцию не передаётся this
|
|
|
kwisp |
![]()
Сообщение
#4
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Litkevich Yuriy,
компилятор не обманешь. выложи кода побольше. какие челны есть, есть ли константные? перегруженные функции, есть ли констнатные? где объект MyClass создаешь? не констнатный ли он? в функцию не передаётся this ещё как передаётся. только без участия программиста. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#5
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
kwisp |
![]()
Сообщение
#6
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
а причем здесь, он. Ну пусть константный, ну и что. Что с вызовом функции не так? оба-на! как ну и что? функция к неконстантным членам имеет доступ? имеет. почему? потому что она не константная! небось еще и свойства объекта меняешь какие небудь! сделай перегруженную константную функцию и пользуйся своим константным объектом. ![]() я понимаю еслиб речь шла о Питоне, но не о С++. ну слово передается ты первый употребил, а не я. я лишь повторил, так что бы было понятнее. в любом методе класса С++ есть доступ к this, даже в констнатном методе есть доступ к константным функциям и членам этого самого this. Ну пусть константный, ну и что. Что с вызовом функции не так? побольше кода и всё станет ясно. объявление и определение метода класа, членов, создание объекта класса и использование. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
проблему решил, однако компиллер неуместное сообщение формирует.
void MyClass::somefunc() объявлена с квалификатором const. Внутри неё вызывалась myfunc, без оного. В связи с чем сообщение должно было бы выглядеть: "вызов не константное myfunc внутри константной функции", всё было бы понятно. П.С. у этого класса вообще из полей одна только константа строковая. Все остальные переменные локальные в функциях |
|
|
kwisp |
![]()
Сообщение
#8
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
однако компиллер неуместное сообщение формирует. void MyClass::somefunc() объявлена с квалификатором const. Внутри неё вызывалась myfunc, без оного. В связи с чем сообщение должно было бы выглядеть: "вызов не константное myfunc внутри константной функции", всё было бы понятно. ну ... discards - отвергать, т.е. ясно что неверное использование квалификатора доступа. либо он лишний либо его не хватает. функцию компилятор тебе верно указал ... |
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
kwisp |
![]()
Сообщение
#10
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
П.С. у этого класса вообще из полей одна только константа строковая. Все остальные переменные локальные в функциях это не никак не освобождает от запрета вызова неконстантной функции константного объекта, даже если в последнем одно поле и то константное. Столку сбивает тот факт, что якобы я помещаю константный экземпляр своего класса в качестве this. ведь так и происходит. в любом методе класса есть указатель this, и ты об этом знаешь, когда выбираешь квалификаторы доступа функциям и квалификаторы доступа объектам.
Причина редактирования: уточнение
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 11:09 |