Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 1
Регистрация: 10.04.2013
Сообщений: 33

Vector в разных файлах

15.11.2013, 23:55. Показов 1241. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте проблема заключается в следующем. Есть три Юнита.
В Юнит2 создан вектор указателей на абстрактный класс
C++
1
std::vector<CShapes*> ArrayOfShapes;
В Юнит1 С вектором делаются различные действия
C++
1
2
3
ArrayOfShapes.push_back(new CCircle("bub", 5));
Memo1->Lines->Add(ArrayOfShapes.size());
Memo1->Lines->Add(ArrayOfShapes[0]->GetName());
Но почему то в Юнит 3 эти же действия мы совершить не можем.
Все хедеры подключены правильно. В чем может быть проблема, может кто сталкивался с подобным.
Забыл указать CShapes абстрактный, а CCircle наследует его.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2013, 23:55
Ответы с готовыми решениями:

Tdbf, как найти дубли в разных файлах?
есть несколько таблиц .dbf все они одинаковой структуры как с помощью TDBF во всех таблицах найти одинаковые записи по полю Name и...

JS Функционал в разных файлах
растащил код JS По разным файлам и фсе файлы подключил к страницею. Пощёл далще и прищёл к необходимости по клику который отслеживается в...

Программирование в разных файлах
Я только начинающий программист(даже очень начинающий) и начал с языка c++. У меня есть файл main.cpp, где вам дают выбрать какою функцию...

11
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
16.11.2013, 01:33
Цитата Сообщение от igormalanyk Посмотреть сообщение
Но почему то в Юнит 3 эти же действия мы совершить не можем.
С чего бы это? Если в хидере (Unit2.h) было дано описание:
C++
1
extern std::vector<CShapes*> ArrayOfShapes;
, а в одном из CPP-файлов (с твоем случае - в Unit2.cpp) - то, что ты привел первой строкой, без extern, то все прекрасно делается из любого модуля, к которому подключен Unit2.h...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
16.11.2013, 02:15
но почему тогда без extern в первом юните фунциклирует?
0
1 / 1 / 1
Регистрация: 10.04.2013
Сообщений: 33
16.11.2013, 02:43  [ТС]
Спасибо проблема уже решена
Просто в Юнит 2 перед объявлением добавил extern
А в Юнит 3 после инклудов написал
C++
1
std::vector<CShapes*> ArrayOfShapes;
Кстати Юнит 1 работает и без этого. Понятия не имею почему, Но работает же.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
16.11.2013, 03:17
Цитата Сообщение от igormalanyk Посмотреть сообщение
Просто в Юнит 2 перед объявлением добавил extern
А в Юнит 3 после инклудов написал
Правой рукой чесать левое ухо - не самый очень удобный способ. Самый удобный я описал: хидер содержит только упоминание (объявление) о том, что где-то в проекте есть определение самОй переменной, и теперь любой модуль, к которому такой хидер будет подключен, может использовать переменную (найти ее определение и связать с объявлением - проблема линкера)... Все-таки, надо почитать об отличии объявления (declaration) от определения (definition) переменной.

Цитата Сообщение от igormalanyk Посмотреть сообщение
Юнит 1 работает и без этого
Unit1 это вообще что? Прямо вот так, без предварительного объявления, берет и работает, при том, что сама переменная определена в другом модуле? Не верю. Линкер должен взбунтоваться. Покажи тестовый проект.
0
16.11.2013, 03:36

Не по теме:

Цитата Сообщение от UI Посмотреть сообщение
правой рукой чесать левое ухо - не самый очень удобный способ.
Это зависит от куда руки растут :D...

0
1 / 1 / 1
Регистрация: 10.04.2013
Сообщений: 33
16.11.2013, 14:44  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Не верю. Линкер должен взбунтоваться. Покажи тестовый проект.
Напиши почту я скину проект, на форуме проблемы с загрузкой.
0
16.11.2013, 14:48

Не по теме:

Цитата Сообщение от igormalanyk Посмотреть сообщение
Напиши почту я скину проект, на форуме проблемы с загрузкой.
http://rghost.ru/

0
1 / 1 / 1
Регистрация: 10.04.2013
Сообщений: 33
16.11.2013, 15:28  [ТС]
проект, еще не дописанный
Вложения
Тип файла: zip Bild.zip (13.9 Кб, 1 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
16.11.2013, 15:52
igormalanyk, и чего? Проект нормально компилируется только потому, что у тебя в Unit2.h запихана строка:
C++
23
    extern std::vector<CShapes*> ArrayOfShapes;
А все остальные модули подключают этот заголовочный файл. Как раз то, о чем я и говорил.

P.S. Не надо архивировать всё, что есть в проекте, временные файлы и результаты компиляции можно убрать, тогда все прекрасно грузится на форум...
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.11.2013, 16:03
http://rghost.ru/50211367 без extern
0
1 / 1 / 1
Регистрация: 10.04.2013
Сообщений: 33
17.11.2013, 01:08  [ТС]
Дело в том, что пока в Юнит 3 на прописал
C++
1
std::vector<CShapes*> ArrayOfShapes;
Юнит 3 не мог внести изменения в вектор.
А Юніт 1 мог менять вектор как эму пожелается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2013, 01:08
Помогаю со студенческими работами здесь

Общие переменные в разных файлах
Привет. Помогите начинающему плиз! Есть желание разные методы (функции) раскидать по разным файлам одного проекта. Проблема в том, что...

Исправление текста в разных файлах
Здравствуйте, у меня имеется исходная папка содержащая множество различных папок. В каждой из этих попок лежат по несколько текстовых фалов...

работа с экземпляром в разных файлах
Добрый день коллеги! Недавно узнал о существовании Vue. И уже влюблён! Вопрос. Как работать с одним экземпляром класса...

Видимость переменной в разных файлах
Добрый вечер) Помоги пожалуйста разобраться) Нужно чтобы переменная len из файла 2 попала (была определена) в файле 1. Компилятор выдает...

Использование переменной в разных файлах
Файлы: login.php - форма авторизации data.php - код авторизации main.php - главная страничка В файле...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru