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

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

Войти
Регистрация
Восстановить пароль
 
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
#1

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

16.11.2011, 19:44. Просмотров 1094. Ответов 3
Метки нет (Все метки)

Собственно проблема. Сейчас пишу класс матрицы, не могу понять на что ругается компилятор. Весь код выкладывать не буду, выложу проблемное место.
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> &'

В чем проблема?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 19:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Компилятор ругается : cannot convert 'this' pointer (C++):

Vector ругается на использование классов E2397 и Invalid pointer operation - C++
Не получается использовать vector с собственными классами выдает либо Unit1.cpp(62): E2397 Template argument cannot have static or local...

Компилятор ругается - C++
Условие Создать класс, содержащий сведения о количестве изделий, собранный сборщиками цеха за неделю. Класс должен содержать следующие...

ругается компилятор: - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;process.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; float a,b; ...

Компилятор не ругается - C++
Компилятор по разному реагирует на 2 указателя на строки (см.комментарии). В связи с этим появился вопрос - где хранятся аргументы...

Ругается компилятор - C++
Компилирую программу: // Proba2.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &lt;vector&gt;...

Ругается компилятор - C++
Создать класс жидкость, имеющий название (указатель на строку), плотность. Определить конструкторы, деструктор и операторы вывода в поток....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.11.2011, 19:55 #2
PraZuBeR,
C++
1
2
 const T& at(size_type i, size_type j) const;
T& at(size_type i, size_type j);
И inline лучше не юзать.
1
Сыроежка
Заблокирован
16.11.2011, 19:56 #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;

То есть в вашем классе должны быть два таких метода: один константный, а другой не константный.
1
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
16.11.2011, 19:58  [ТС] #4
Спасибо, разобрался) Немного потерялся в методах. Были перегружены скобочки и для const, и для не-const, а для метода at перегрузить первый вариант забыл.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2011, 19:58
Привет! Вот еще темы с ответами:

ошибка компилятор ругается... - C++
LDay::LDay(DayOfWeek today,unsigned short int Lessons,time LessonTime,string s1, string s2=&quot;TEST&quot;,string s3=&quot;&quot;,string s4=&quot;&quot;,string...

Компилятор ругается на strrev - C++
Подключил cstring, все равно онлайн Ideone и Shell не понимают strrev().

Компилятор ругается на textcolor - C++
компилятор собственно Visual Studio C++ 2010 Express #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

почему компилятор не ругается? - C++
Почему компилятор не ругается, когда я исп. неинициализированную переменную и кладёт автоматически туда мусор. (см..коменатрий в коде): ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.11.2011, 19:58
Ответ Создать тему
Опции темы

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