73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
||||||
1 | ||||||
vector и конструторы30.06.2013, 08:33. Показов 1900. Ответов 18
Метки нет (Все метки)
есть, например, примерно следующий код:
Ход моих мыслей: CC::CC(int) - это я делаю CC(1) в пушбаке вектора. следом за ним CC::CC~() - удаляется безымянный экземпляр которым я проинициализировал новый элемент вектора, но ведь должен и конструктор копии вызваться(?)
0
|
30.06.2013, 08:33 | |
Ответы с готовыми решениями:
18
error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) Цикл: Создайте класс Matrix на базе вектора vector<vector<int>>. Ошибка [Linker error] undefined reference to `Vector::Vector(int)' |
15 / 15 / 8
Регистрация: 25.06.2013
Сообщений: 63
|
|
30.06.2013, 09:58 | 2 |
1
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
30.06.2013, 10:09 [ТС] | 3 |
странно, почему вектор требует обязательно конструкор копии, и не хочет без него компилиться впринципе, НО! если есть вот такого вида конструктор CC::CC(CC*) - всё компилится нормально, то есть его как-бы вместо конструктора копии проглатывает вектор, но вызывать его не хочет
0
|
15 / 15 / 8
Регистрация: 25.06.2013
Сообщений: 63
|
|
30.06.2013, 10:21 | 4 |
этих тонкостей я уже не знаю, почему вектор требует обязательно конструктор копии
Добавлено через 1 минуту может быть при добавлении нового элемента в вектор n.push_back(CC(1)); вызывается этот конструктор
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
30.06.2013, 10:43 [ТС] | 5 |
ну почему он его требует, в принципе, объяснимо, но вот почему вместо него прокатывает другой конструктор, который впоследствии не используется, это мне не ясно совсем
Добавлено через 11 минут походу, при наличии конструктора CC::CC(CC*) компилятор сам зачем-то создаёт свой конструктор копии, в противном случае не хочет Добавлено через 10 минут щас вообще без конструкторов компилится - ничего не понимаю
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
30.06.2013, 11:37 | 6 |
Компилятор генерирует:
1) конструктор по умолчанию (только если нет других конструкторов); 2) конструктор копирования; 3) оператор присваивания; 4) деструктор.
1
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
30.06.2013, 11:44 [ТС] | 7 |
0
|
30.06.2013, 11:55 | 8 |
По-умолчанию копирующий конструктор и оператор присваивания генерируются всегда, если они не удалены или не определены программистом, это стандарт.
Именно в таком случае следует заглядывать в стандарт, если не понятно какое-то поведение. Вектору необходим конструктор копирования, иначе как он сохранит внутри объект, передаваемый ему по значению? Другая альтернатива в C++11 конструктор перемещения, но он может быть применен только для rvalue reference.
1
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
30.06.2013, 11:56 [ТС] | 9 |
Добавлено через 56 секунд ну так он же всегда генерится автоматом
0
|
30.06.2013, 11:57 | 10 |
Ни в каких.
Большинство классов, хранящих внутри себя указатели и/или системные ресурсы нуждаются в нетривиальном конструкторе копирования.
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
30.06.2013, 12:07 [ТС] | 11 |
Каким же образом рождается ошибка компилятора, когда вектор не видит конструктор копирования, который генерируется "всегда" и "ни в каких" случаях не бывает "explicit"
Добавлено через 7 минут Я это прекрасно понимаю. Более того, я не вижу смысла копировать экземпляр класса(в моём конкретном случае). В идеале я хочу выделить еще кусок памяти вектору и один(!) раз вызвать конструктор при создании в этом куске памяти экземпляра класса, вместо этого, вектор хочет навызывать кучу конструкторов и гонять память туда-обратно, затем всё это удалять. В результате нужна еще куча лишнего кода, который я не хочу писать. (я не опримере из первого поста, проблема возникла в проекте несколько больших масштабов) Не удалял, не писал его сам
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
||||||
30.06.2013, 12:29 [ТС] | 13 | |||||
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
||||||
30.06.2013, 12:35 [ТС] | 15 | |||||
Узнать
Добавлено через 1 минуту
Вот такую ошибку выдает Добавлено через 1 минуту Я извиняюсь, нито, но они аналогичные Добавлено через 1 минуту
0
|
Каратель
|
|
30.06.2013, 12:50 | 16 |
@Praktolock, http://codepad.org/1uISrLln
STGRAPHOBJECT умеет себя копировать? без кода который повторяет проблему трудно что либо сказать.
1
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|||||||||||
30.06.2013, 16:59 [ТС] | 17 | ||||||||||
судя по всему в STGRAPHOBJECT дело
Добавлено через 20 минут я тут панавыдёргивал и собрал всё в 1 кучу. вот в таком виде компилится:
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
01.07.2013, 02:35 [ТС] | 19 |
так и сделал, любопытно узнать почему с ним не работает ничего?
0
|
01.07.2013, 02:35 | |
01.07.2013, 02:35 | |
Помогаю со студенческими работами здесь
19
vector<Struct2{int,vector<struct1>}> или множественное наследование ... Как корректно скопировать vector в vector внутри класса Указатель на объект вектор в векторе vector < vector<int>* >* Как сложить два vector и записать в третий vector ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |