Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
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
|
Цитата(kwisp @ 9.4.2010, 14:20) Link объявление в заголовочном файле. квалификатора const ни где нетЦитата(Litkevich Yuriy @ 9.4.2010, 14:16) Link 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 создаешь? не констнатный ли он? Цитата(Litkevich Yuriy @ 9.4.2010, 11:25) Link в функцию не передаётся this ещё как передаётся. только без участия программиста. |
|
|
|
|
Litkevich Yuriy |
9.4.2010, 10:38
Сообщение
#5
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(kwisp @ 9.4.2010, 14:33) Link где объект MyClass создаешь? не констнатный ли он? а причем здесь, он. Ну пусть константный, ну и что. Что с вызовом функции не так?Цитата(kwisp @ 9.4.2010, 14:33) Link ещё как передаётся. только без участия программиста. я понимаю еслиб речь шла о Питоне, но не о С++.
|
|
|
|
|
kwisp |
9.4.2010, 10:44
Сообщение
#6
|
|
астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23
|
Цитата(Litkevich Yuriy @ 9.4.2010, 11:37) Link а причем здесь, он. Ну пусть константный, ну и что. Что с вызовом функции не так? оба-на! как ну и что? функция к неконстантным членам имеет доступ? имеет. почему? потому что она не константная! небось еще и свойства объекта меняешь какие небудь! сделай перегруженную константную функцию и пользуйся своим константным объектом. Цитата(Litkevich Yuriy @ 9.4.2010, 11:38) Link я понимаю еслиб речь шла о Питоне, но не о С++. ну слово передается ты первый употребил, а не я. я лишь повторил, так что бы было понятнее. в любом методе класса С++ есть доступ к this, даже в констнатном методе есть доступ к константным функциям и членам этого самого this. Цитата(Litkevich Yuriy @ 9.4.2010, 11:38) Link Ну пусть константный, ну и что. Что с вызовом функции не так? побольше кода и всё станет ясно. объявление и определение метода класа, членов, создание объекта класса и использование. |
|
|
|
|
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
|
Цитата(Litkevich Yuriy @ 9.4.2010, 11:47) Link однако компиллер неуместное сообщение формирует. void MyClass::somefunc() объявлена с квалификатором const. Внутри неё вызывалась myfunc, без оного. В связи с чем сообщение должно было бы выглядеть: "вызов не константное myfunc внутри константной функции", всё было бы понятно. ну ... discards - отвергать, т.е. ясно что неверное использование квалификатора доступа. либо он лишний либо его не хватает. функцию компилятор тебе верно указал ... |
|
|
|
|
Litkevich Yuriy |
9.4.2010, 11:04
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Litkevich Yuriy @ 9.4.2010, 14:16) Link discards qualifiers буквально "бракованные квалификаторы" (хотя может тут discards - глагол).Столку сбивает тот факт, что якобы я помещаю константный экземпляр своего класса в качестве this. |
|
|
|
|
kwisp |
9.4.2010, 11:08
Сообщение
#10
|
|
астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23
|
Цитата(Litkevich Yuriy @ 9.4.2010, 11:47) Link П.С. у этого класса вообще из полей одна только константа строковая. Все остальные переменные локальные в функциях это не никак не освобождает от запрета вызова неконстантной функции константного объекта, даже если в последнем одно поле и то константное. Цитата(Litkevich Yuriy @ 9.4.2010, 12:04) Link Столку сбивает тот факт, что якобы я помещаю константный экземпляр своего класса в качестве this. ведь так и происходит. в любом методе класса есть указатель this, и ты об этом знаешь, когда выбираешь квалификаторы доступа функциям и квалификаторы доступа объектам.
Причина редактирования: уточнение
|
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 1.1.2026, 15:34 |