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

Параметр в конструкторе копирования - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
MAnton
 Аватар для MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
11.02.2013, 17:16     Параметр в конструкторе копирования #1
Есть класс
C++
1
2
3
4
5
6
class CMatrix{
  valarray<valarray<double> > matrix;
public:
  CMatrix(const CMatrix &M);
     .....
 };
C++
1
2
3
4
5
6
7
8
9
CMatrix::CMatrix(const CMatrix &M){
  pair<size_t,size_t> s = M.Size();
  matrix.resize(s.first);
  for(size_t i = 0 ; i < s.first ; i++)
    matrix[i].resize(s.second);
  for(size_t i = 0; i < s.first; i++)
    for(size_t j = 0 ; j < s.second ; j++)
      matrix[i][j] = M(i,j);
}
Вы дает ошибку:
In copy constructor «CMatrix::CMatrix(const CMatrix&)»:
/home/anton/Project/C++/Matrix/src/CMatrix.cpp:11:34: ошибка: passing «const CMatrix» as «this» argument of «std::pair<long unsigned int, long unsigned int> CMatrix::Size()» discards qualifiers [-fpermissive]
/home/anton/Project/C++/Matrix/src/CMatrix.cpp:17:27: ошибка: passing «const CMatrix» as «this» argument of «double& CMatrix::operator()(int, int)» discards qualifiers [-fpermissive]

Если убрать модификатор const то все работает нормально. В чем проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2013, 17:16     Параметр в конструкторе копирования
Посмотрите здесь:

C++ почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
C++ Зачем нужна ссылка в конструкторе копирования
C++ Ошибка в конструкторе копирования класса
Ошибка в конструкторе копирования C++
C++ О конструкторе копирования
C++ В конструкторе копирования отцовского (_str) класса возникает некое "необработанное исключение"
C++ Указатель this в конструкторе копирования
C++ С какой целью необходимо передвать по ссылке переменную в конструкторе копирования?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
11.02.2013, 18:13     Параметр в конструкторе копирования #2
Сделайте метод Size константным
C++
1
std::pair<long unsigned int, long unsigned int> Size() const;
и добавьте константную версию для operator()
C++
1
const double& CMatrix::operator()(int, int) const;
Yandex
Объявления
11.02.2013, 18:13     Параметр в конструкторе копирования
Ответ Создать тему
Опции темы

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