![]() 35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
||||||
1 | ||||||
Vector ругается на использование классов E2397 и Invalid pointer operation02.04.2012, 00:00. Показов 2022. Ответов 13
Метки нет Все метки)
(
Не получается использовать vector с собственными классами
выдает либо [BCC32 Error] Unit1.cpp(62): E2397 Template argument cannot have static or local linkage, либо Invalid pointer operation. сократил код до того, что видите ниже и не понимаю, почему стандартные типы переменных вектор воспринимает и не ругается. А на класс ругается. Скажите, что я не правильно делаю =( Ошибка "Invalid pointer operation" возникает когда в цикле при помощи push_back создаются новые объекты. При чем вылетает ошибка на 2,3 интерации, первая всегда проходит без проблем. Если интерацию заменить ручным вводом push_back , то ошибка "Invalid pointer operation" вылетает при попытки закрыть откомпилировонную программу (при выходе)
0
|
02.04.2012, 00:00 | |
Ответы с готовыми решениями:
13
Invalid pointer operation invalid pointer operation Invalid Pointer Operation |
![]() ![]() |
|||||||||||
02.04.2012, 00:14 | 2 | ||||||||||
Добавлено через 3 минуты
Добавлено через 3 минуты Вместо GPS можно было использовать стандартный TPoint
1
|
![]() 35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
|||||||||||
02.04.2012, 07:32 [ТС] | 3 | ||||||||||
извиняюсь, копипастил в компилятор, компилятор поправил, а тут переправить я забыл.
В Билдере писал, весь код находится в __fastcall TMainWindow::TMainWindow(TComponent* Owner) : TForm(Owner) Извините, вот так вот
0
|
![]() 60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
02.04.2012, 07:52 | 4 |
может нужно создать конструктор копии,чтоб он мог копировать значения в вектор?
1
|
![]() 35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
||||||||||||||||
02.04.2012, 10:57 [ТС] | 5 | |||||||||||||||
добавил конструктор копий... заработало
![]()
Добавлено через 30 минут Я совершенно неграмотно составил конструктор копий (так как мне надо было рандомное позиционирование, я использовал Random()), но в результате когда создавался очередной объект CBot, неумещяющийся в контейнер, контейнер расширялся копируя старые объекты и меня заданные им позиции. Решил сделать так:
![]() Вопрос Почему функции Random и Rand()% всегда выдают одинаковую последовательность "рандомных" значений. (Запускаю программу последовательность - 0, 152, 364, 32 ... закрываю программу, запускаю снова и абсолютно в таком же порядке выдаются значения) Я понимаю что абсолютного рандомного значения у компьютера не будет. Но я пробывал с разными интервалами времени и всеровно одно и тоже (тоесть с внутренними мс времени работы это ни как не связано). Почему так? Понял как без CBot(const CBot&, short,short) сделать ![]()
0
|
Делаю внезапно и красиво
![]() ![]() 1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
02.04.2012, 12:47 | 6 |
Потому что при изменении размера вектора, объекты из старого вектора копируются в новый.
1
|
![]() 60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
02.04.2012, 17:15 | 7 |
зачем создавать конструктор копий
чтоб компилятор знал,как копировать данные в вектор,ибо ваши данные(то есть сделанные вами и как следствие не являющиеся родными) он не знает,о них ничего не слышал и конечно не знает как с ними работать потому что это псевдослучайная последовательность чисел,если хочешь действительно случайную напиши так srand(time(0));//функция для засеивания генератора чисел rand() % ...
1
|
![]() 5057 / 3117 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
02.04.2012, 19:12 | 8 |
alexey31415, вообще компилятор всегда предоставляет конструктор копии и оператор присваивания, если таковые не определены программистом. Эти функции просто копируют все поля класса с использованием их конструкторов копии (plain-типы просто побайтно копируются). Однако если класс предоставляет пользование некоторым ресурсом, который логически должен разделиться при копировании, и это разделение не может быть произведено автоматически (указатель, указывающий на динамическую память, будет просто скопирован, и оба указателя начнут указывать на одну и ту же память; логически же необходимо выделить новую память и скопировать туда информацию из старой), то тут и возникает необходимость реализовывать собственные конструктор копии и оператор присваивания.
2
|
Делаю внезапно и красиво
![]() ![]() 1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
02.04.2012, 19:25 | 9 |
Кроме случаев, когда пользователь объявит свой конструктор. А тут уже есть конструктор с параметрами, поэтому компилятор и не генерит конструктор копирования.
1
|
![]() 5057 / 3117 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
02.04.2012, 19:44 | 10 |
Deviaphan, насколько я помню, верно обратное, т.е. если определён конструктор копии, то конструктор по умолчанию не предоставляется. Конструктор же копии есть всегда. Примеры:
http://liveworkspace.org/code/... a21e8f1671 http://liveworkspace.org/code/... afd417f693
1
|
Делаю внезапно и красиво
![]() ![]() 1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
02.04.2012, 20:05 | 11 |
А может и так. Утверждать не буду, не помню.) Как-то не было возможности проверить...
0
|
![]() 5057 / 3117 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
02.04.2012, 20:17 | 13 |
Avazart, если это вопрос, то да, КК по умолчанию просто скопирует указатели, а потом, в деструкторе, память два раза освободится (в оригинальном объекте и в копии).
1
|
![]() 35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
|
03.04.2012, 09:07 [ТС] | 14 |
Всем спасибо
![]() ![]()
0
|
03.04.2012, 09:07 | |
Помогаю со студенческими работами здесь
14
Invalid pointer operation Invalid pointer operation Invalid pointer operation Invalid pointer operation invalid pointer operation Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
|
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
|
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
|
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
|
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
|
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
|
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
|
Разработка кроссплатформенного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
|
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
|
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
|