2 / 2 / 1
Регистрация: 23.06.2014
Сообщений: 110
|
||||||
1 | ||||||
Vector обектов почему не работает?13.02.2015, 19:40. Показов 2896. Ответов 9
Метки нет (Все метки)
0
|
13.02.2015, 19:40 | |
Ответы с готовыми решениями:
9
Не работает функция sort (vector, vector) Почему не заполняется массив vector? Почему объект типа std::vector не читается из потока? Почему Qt Creator не видит методы элементов std::vector? |
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
|
13.02.2015, 20:06 | 2 |
Сообщение об ошибке есть?
0
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,281
|
||||||
13.02.2015, 20:06 | 3 | |||||
Оно память выделяет, но элементы в векторе не появляются. Помимо выделения памяти, ее нужно инициализировать. Изменить размер вектора с учетом этого можно функцией resize.
А вообще можно так сделать (не компилировал, писал прямо здесь):
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
13.02.2015, 20:09 | 4 |
потому что мемберы в ваших классах некопируемые (ofstream, ifstream), а вектор требует, чтобы
объекты это умели делать. по идее они у вас мувальные, надо с move-конструкторами копирования похимичить. возможно получится. точно не скажу. второе решение, которое точно сработает, хранить смарт поинтеры на стримы: std::shared_ptr<std::ofstream>, std::shared_ptr<ifstream>
0
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,281
|
|
13.02.2015, 20:17 | 5 |
PS. Вообще, этот код не должен компилироваться. Т.к. внутри Base сидят объекты файловых потоков, а их копировать нельзя (вектор требует copy-constructable). Выход: убрать их из класса, создавать в том\тех методах, где они действительно нужны (т.е. непосредственно методах чтения или записи), либо передавать объект потока по ссылке, в нужный метод для записи\чтения. Делать потоки состоянием класса - не нужно.
Добавлено через 1 минуту Уже ответили Но в каждом элементе хранить файловый поток, хоть по ссылке, хоть по значению - это нонсенс все равно.
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
13.02.2015, 20:22 | 6 |
ну в конкретно приведенном коде они пожлуй лишние к качестве мемберов.
а вообще держать их в смартпоинтерах - вполне себе решение, когда стрим нужен как мембер класса.
0
|
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
|
13.02.2015, 20:23 | 7 |
DU, что значит "не копируемые"? Откуда это?
0
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,281
|
|
13.02.2015, 20:28 | 8 |
Из стандарта, вестимо
У потоков закрытые\удаленные конструктор копирования\оператор присвоения.
1
|
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
|
13.02.2015, 20:30 | 9 |
А это тогда для чего? http://www.cplusplus.com/refer... operator=/
0
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,281
|
|
13.02.2015, 20:31 | 10 |
1
|
13.02.2015, 20:31 | |
13.02.2015, 20:31 | |
Помогаю со студенческими работами здесь
10
error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) Не работает extern для vector Не работает operator<< шаблонного класса Vector Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |