1 / 1 / 1
Регистрация: 11.11.2012
Сообщений: 23
|
||||||||||||||||
1 | ||||||||||||||||
Не могу понять, как правильно передать указатель на объект в файл01.03.2014, 17:37. Показов 1744. Ответов 8
Метки нет Все метки)
(
Есть вектор v, который надо отсортировать. Есть класс MergeSort, который это должен делать, он содержит в качестве параметра указатель на вектор. Т.е. я хотел сделать так, что за конкретным объектом класса закреплялся бы навсегда конкретный вектор, и вызывая элемент-функцию .sort(), всегда можно было бы отсортировать закрепленный за классом вектор. Но вот не задача, если поменять вектор, и после этого вызвать упомянутую выше ф-ию, то она ровным счетом ничего не делает. Почему так происходит, и как это исправить?
Вот собственно код: main.cpp
MergeSort.h
Описался в названии темы. Не в файл, а в класс конечно)
0
|
|
01.03.2014, 17:37 | |
Ответы с готовыми решениями:
8
Как правильно передать указатель на структуру, и правильно ее использовать Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект Не знаю как правильно передать указатель
|
![]() ![]() |
|
01.03.2014, 18:18 | 2 |
Мне кажется дело в том, что вы упутили один момент. При заполнении вектора его адрес может поменяться. Поэтому прежде чем сортировать измененный вектор убедитесь, что в объект v передан обновленный указатель на вектор.
Не по теме: using объявления лучше писать после всех инклайдов. Добавлено через 6 минут Правка:
0
|
1 / 1 / 1
Регистрация: 11.11.2012
Сообщений: 23
|
|
01.03.2014, 18:28 [ТС] | 3 |
Я так тоже сначала подумал, и сравнил на всех этапах &v и v(элемент данных-указатель на вектор). Но нет, везде адрес одинаковый.
0
|
![]() ![]() |
||||||||||||||||
01.03.2014, 18:35 | 4 | |||||||||||||||
Но это очевидно же:
Можно так:
1
|
1 / 1 / 1
Регистрация: 11.11.2012
Сообщений: 23
|
||||||
01.03.2014, 18:48 [ТС] | 5 | |||||
Хм... Да, так работает, хотя если сделать вот так:
0
|
![]() ![]() |
||||||
01.03.2014, 19:03 | 6 | |||||
Вы должно быть не до конца поняли. Адрес вектора это не адрес блока памяти выделенного внутри вектора для хранения данных. Вот так должно быть понятнее:
Кликните здесь для просмотра всего текста
Хотя я сам начинаю сомниваться правильно ли я понял задачу ![]()
0
|
1 / 1 / 1
Регистрация: 11.11.2012
Сообщений: 23
|
|
01.03.2014, 19:42 [ТС] | 7 |
Ну в общем то, что я хочу, это каким-либо образом всегда иметь возможность обратиться к вектору, если это возможно.
0
|
![]() ![]() |
|||||||||||
03.03.2014, 08:41 | 8 | ||||||||||
![]() Решение
Оказывается все довольно просто. После заполненя вектора вы не изменяете поле size своего объекта. Рекомендую везде где эта переменная встречается заменить ее на метод вектора:
1
|
1 / 1 / 1
Регистрация: 11.11.2012
Сообщений: 23
|
|
03.03.2014, 18:17 [ТС] | 9 |
Боже мой, действительно!!!
Ilot Огромное вам спасибо, что помогли!
0
|
03.03.2014, 18:17 | |
Помогаю со студенческими работами здесь
9
Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции)
Как правильно передать в функцию указатель на двумерный массив? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |