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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
#1

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

11.02.2013, 17:16. Просмотров 1479. Ответов 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 то все работает нормально. В чем проблема?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2013, 17:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Параметр в конструкторе копирования (C++):

Можно ли в конструкторе копирования поменять один параметр? - C++
Здравствуйте. Мне нужно при создании объекта через конструктор копирования поменять один параметр в конструкторе. Такое можно реализовать?

О конструкторе копирования - C++
Доброго времени суток всем присутствующим. Интересует маленький вопрос. В 15-й строке происходит прямое обращение к полю входного объекта...

Указатель this в конструкторе копирования - C++
Добрый всем вечер. Подскажите пожалуйста, как правильно применить в конструкторе копирования указатель this? Вот есть код. ...

Ошибка в конструкторе копирования C++ - C++
Помогите, пожалуйста создать конструктор копирования, который будет копировать элемент и добавлять его в список. У меня получился такой...

Ошибка в конструкторе копирования - C++
Здравствуйте. Есть один класс для работы с многочленами, который хранит элементы многочлена в списке. Так вот, в конструкторе копирования...

Ошибка в конструкторе копирования класса - C++
Хотя и делал по образцу, но почему то лезет ошибка записи за пределы динамического массива, хотя и переменные копируются верно (отладчик...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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;
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2013, 18:13
Привет! Вот еще темы с ответами:

Зачем нужна ссылка в конструкторе копирования - C++
Вопрос такой, Зачем нужна ссылка в конструкторе копирования? Почему не передавать напр. по указателю?

Ссылка rvalue в конструкторе копирования и операторе присваивания - C++
Здравствуйте. Решил попробовать ссылки rvalue в классе. Привожу часть: \\BinaryArray.h class BinaryArray { protected: ...

Исправить ошибку в конструкторе копирования пользовательского класса Sort - C++
Здравствуйте. Такая вот проблема. Обычный конструктор работает без ошибок и подчеркиваний: Sort::Sort() { cout &lt;&lt; &quot;len = &quot;; ...

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


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

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

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