Форум программистов, компьютерный форум CyberForum.ru

Компилятор ругается : cannot convert 'this' pointer - C++

Войти
Регистрация
Восстановить пароль
 
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
16.11.2011, 19:44     Компилятор ругается : cannot convert 'this' pointer #1
Собственно проблема. Сейчас пишу класс матрицы, не могу понять на что ругается компилятор. Весь код выкладывать не буду, выложу проблемное место.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
inline T& at(size_type i, size_type j)
{
    return _data[i * _row_size + j];
}
 
matrix& operator +=(const matrix &m)
{
    if (_col_size != m._col_size || _row_size != m._row_size)
        throw std::exception("failed in operator +=");
    for (size_type col = 0; col < _col_size; ++col)
        for (size_type row = 0; row < _row_size; ++row)
            this->at(col, row) += m.at(col, row);
    return *this;
}
На 12 строчку выдает:
error C2662: 'matrix<T>::at' : cannot convert 'this' pointer from 'const matrix<T>' to 'matrix<T> &'

В чем проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 19:44     Компилятор ругается : cannot convert 'this' pointer
Посмотрите здесь:

компилятор ругается на структуру C++
Почему компилятор ругается? C++
Ругается компилятор C++
C++ Vector ругается на использование классов E2397 и Invalid pointer operation
C++ компилятор с++ 2012 ругается
ругается компилятор: C++
Ругается компилятор C++
C++ Компилятор не ругается
C++ Компилятор ругается на textcolor
Компилятор ругается на fopen C++
Компилятор ругается C++
C++ Компилятор ругается на strrev

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.11.2011, 19:55     Компилятор ругается : cannot convert 'this' pointer #2
PraZuBeR,
C++
1
2
 const T& at(size_type i, size_type j) const;
T& at(size_type i, size_type j);
И inline лучше не юзать.
Сыроежка
Заблокирован
16.11.2011, 19:56     Компилятор ругается : cannot convert 'this' pointer #3
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Собственно проблема. Сейчас пишу класс матрицы, не могу понять на что ругается компилятор. Весь код выкладывать не буду, выложу проблемное место.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
inline T& at(size_type i, size_type j)
{
    return _data[i * _row_size + j];
}
 
matrix& operator +=(const matrix &m)
{
    if (_col_size != m._col_size || _row_size != m._row_size)
        throw std::exception("failed in operator +=");
    for (size_type col = 0; col < _col_size; ++col)
        for (size_type row = 0; row < _row_size; ++row)
            this->at(col, row) += m.at(col, row);
    return *this;
}
На 12 строчку выдает:
error C2662: 'matrix<T>::at' : cannot convert 'this' pointer from 'const matrix<T>' to 'matrix<T> &'

В чем проблема?
Проблема в том, что в вашей функции-операторе параметр указан как const matrix &m, то есть как константный объект. В то же время в строке 12 вы для него вызываете функцию inline T& at(size_type i, size_type j), которая не является константной!

Вам нужно объявить второй такой же метод, но с сигнатурой

inline T& at(size_type i, size_type j) const;

То есть в вашем классе должны быть два таких метода: один константный, а другой не константный.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
16.11.2011, 19:58  [ТС]     Компилятор ругается : cannot convert 'this' pointer #4
Спасибо, разобрался) Немного потерялся в методах. Были перегружены скобочки и для const, и для не-const, а для метода at перегрузить первый вариант забыл.
Yandex
Объявления
16.11.2011, 19:58     Компилятор ругается : cannot convert 'this' pointer
Ответ Создать тему
Опции темы

Текущее время: 22:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru