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