Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
MrAndrey_ka
79 / 79 / 2
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
#1

Ошибка при обращении к методу константного объекта - C++

01.04.2014, 13:10. Просмотров 434. Ответов 15
Метки нет (Все метки)

Есть некий класс, в нем есть метод const size_t Length();
пишу оператор сложения
C++
1
2
3
 Class& operator + (const Class& Val) {
    if (Val.Length() == 0) return *this;
.....}
получаю ошибку: error C2662: const size_t Class::Length(void): невозможно преобразовать указатель "this" из "const Class" в "Class &"

что я делаю не так? напрашивается конечно вариант: Class& operator + (Class& Val). но к нему прибегать не хотелось бы!

Добавлено через 11 минут
хотел упростить код, но вышло что в упрощенной версии все работает, так что вот версия которая не работает
C++
1
2
3
4
5
 
template <class Type>
Class <Type>& operator + (const Class<Type>& Val) {
    if (Val.Length() == 0) return *this;
.....}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 13:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка при обращении к методу константного объекта (C++):

Реализовать генерацию новых псевдослучайных чисел при обращении к методу - C++
Проблема заключается вот в чем: Я обращаюсь к методу &quot;Inputrandom&quot; 2 раза, но он генерирует 2 раза одно и тоже. Как реализовать генерацию...

Изменение константного объекта с применением const_cast - C++
1. Это код из учебника С. Прата &quot;Лекции и упражнения&quot;. #include &lt;iostream&gt; using namespace std; void change(const int* pt,...

Инициализация константного статического объекта - члена класса - C++
Здравствуйте, у меня возникла проблема с инициализацией статического объекта, который является членом класса. Этот объект должен быть...

Беру и спокойно вызываю неконстантную функцию для константного объекта - C++
Это как ? Везде пишут, что сие невозможно в принципе. Или есть исключение для конструктора ? #include &lt;iostream&gt; using namespace...

Ошибка при обращении к классу - C++
Есть класс для хранения элементов, к которым должен быть доступ из других классов - решил объявить как глобальный: Items.h: class...

Ошибка при обращении к указателю: maybe you mean to use '->' - C++
#include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; struct book { char avtor; //fio char caption; ...

15
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
02.04.2014, 19:06 #16
Tulosba, если хочется использовать С#, то надо использовать С#. Пока что подобные вышеизложенной фиче не очень вписываются в идеологию С++.
Без нарушения совместимости с остальным кодом твою идею в С++ не продвинуть. Поэтому на это никто не пойдет.
Цитата Сообщение от Tulosba Посмотреть сообщение
не найдена статическая функция, то используем свободную
Как это поможет отличить функцию static от метода? Если предполагается такой синтаксис:
C++
1
a = b + c;
Способ это обеспечить уже есть - использовать метод. Да, первый параметр в этом случае зарезервирован. Если разрешить static метод для двух аргументов, в которых первый параметр отличного типа, вызывать с тем же синтаксисом, то без пересмотра способа разрешения имен это будет невозможно сделать. Или нужно будет писать что-то вроде этого (что совершенно избыточно):
C++
1
A::operator+("test", a);
Либо так (еще и некрасиво)
C++
1
a.operator+("test", a);
Если разрешать делать static operator, то в любом случае придется придумывать альтернативный способ указания его в коде. И все эти способы добавляют больше проблем, чем решают. Пока что ни один из предложенных тобой вариантов не может быть реализован в современном С++ без значительных потерь. ИМХО, стоит задуматься, отчего функции подобного рода запрещены стандартом.
0
02.04.2014, 19:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2014, 19:06
Привет! Вот еще темы с ответами:

Ошибка при обращении к элементу строки *s - C++
Помогите, пожалуйста. Задача: описать рекурсивную функцию digits(s) целого типа, находящую кол-во цифр в строке s без использования...

Ошибка при обращении к статическому члену - C++
... static void InfinityLoop(); ... //В теле main MyClass::InfinityLoop();} class MyClass{ public: static void...

Ошибка сегментации при обращении к данным контейнера - C++
Вот такой вопрос почему ошибка сигментации возникла не пойму. Задание: Биолог изучает размножение бактерий. Каждый час количество...

Почему не происходит ошибка при обращении к недопустимому индексу - C++
#include &lt;string&gt; int main() { std::string s; s; } Исключения не происходит. Внимание вопрос: я схожу с ума, я не знаю цпп...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru