Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ builder 
:(
    Опции темы
optik
Дата 11.3.2008, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



подскажите плиз:

есть 2 формы (соответсвенно 2 cpp-шника)

в Unit1.cpp объявляется структура:

Код

typedef struct
{
        bool x[9];
        float t;
}elem;



как мне сделать её глобальной? т.е. чтоб можно было с ней работать и в Unit2.cpp

-------------------

для простой переменной типа float с инициализацией при объявлении вопрос решён добавлением следующей конструкции в Unit1.cpp и Unit2.cpp:

Код

extern __declspec(selectany)  float  nu = 0.5;


-------------------

если нет инициализации, то объявление в Unit1.cpp и unit2.cpp вида 

Код

extern elem**  a; 

прокатит?


//структура и переменные объявляются вне всяких классов.. просто вверху файла..
PM MAIL   Вверх
korian
Дата 11.3.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



запихнуть объявление структуры в h файл и инклудить в обоих cpp файлах
PM   Вверх
optik
Дата 12.3.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



в Unit1.h добавил

Код

typedef struct
{
        bool x[9];
        float t;
}elem;

extern elem**  a;


в обоих cpp-шниках инклюдю Unit1.h

ошибка следущая:

Код

[Linker Error] Unresolved external '_a' referenced from ...UNIT1.OBJ


"a"  используется и в Uni1.cpp и в Unit2.cpp...
PM MAIL   Вверх
Nat
Дата 12.3.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.4.2007

Репутация: нет
Всего: нет



А если без extern? Просто 
Код
elem**  a;

Не совсем понятно, зачем тут двойной указатель, конечно. И, да, описываете структуру в privat, а объявляете в public? Может не рационально, но я обычно делаю так:
Код

private:    // User declarations
        struct SETTINGS
        {
                AnsiString NoCom;               //¹ ÑÎÌ ïîðòà
                AnsiString Speed;               //ñêîðîñòü ïåðåäà÷è äàííûõ
                int SizeFlash;                  //ðàçìåð ôëåø-êàðòû â ñåêòîðàõ
        };
public:        // User declarations
        SETTINGS set;


И потом в Unit2:
Код

Form1->set.NoCom = ....

PM MAIL   Вверх
586
Дата 12.3.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(optik @  12.3.2008,  11:42 Найти цитируемый пост)
[Linker Error] Unresolved external '_a' referenced from ...UNIT1.OBJ

в .cpp файл пишешь:
Код
elem**  a;

В .h файл пишешь
Код
typedef struct
{
        float t;       // так структура будет занимать меньше места при выравнивании
        bool x[9];
}elem;

extern elem**  a;

и инклудишь этот h-файл в этот и другие cpp. Всё.

Это сообщение отредактировал(а) 586 - 12.3.2008, 14:56
PM   Вверх
optik
Дата 12.3.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



586 ,
благодарю, так заработало!

а почему в СРР надо было ещё elem**  a; добавлять?
 
PM MAIL   Вверх
586
Дата 13.3.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(optik @  12.3.2008,  21:32 Найти цитируемый пост)
а почему в СРР надо было ещё elem**  a; добавлять?

А по какому адресу будет храниться переменная? Прототип есть (extern ...), а реализации нету.
PM   Вверх
VerLinG
Дата 19.3.2008, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



А вот у меня подобная проблема, не совсем понимаю, каким образом ее решить...

Мне нужно передать в две формы массив объектов, переменную и структуру, проблема в том,  что во второй форме(которая вызывается из первой ) нужны значения этих элементов, заполненные из первой формы....Все переменные и объекты объявляю в Unit1.cpp, через extern не получается решить проблему... 
PM MAIL   Вверх
586
Дата 19.3.2008, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(VerLinG @  19.3.2008,  01:03 Найти цитируемый пост)
Все переменные и объекты объявляю в Unit1.cpp, через extern не получается решить проблему...  

Какие ошибки выводит компилятор? Код в студию.
PM   Вверх
VerLinG
Дата 19.3.2008, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



[Linker Warning] Public symbol '_count' defined in both module K:\ÈÍÔÎÐÌÀÒÈÊÀ\ËÀÁÀ_2\UNIT1.OBJ and K:\ÈÍÔÎÐÌÀÒÈÊÀ\ËÀÁÀ_2\UNIT2.OBJ

Что то в этом роде...Там много таких предупреждений выдает
PM MAIL   Вверх
586
Дата 19.3.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(VerLinG @  19.3.2008,  08:30 Найти цитируемый пост)
[Linker Warning] Public symbol '_count' defined in both module K:\ÈÍÔÎÐÌÀÒÈÊÀ\ËÀÁÀ_2\UNIT1.OBJ and K:\ÈÍÔÎÐÌÀÒÈÊÀ\ËÀÁÀ_2\UNIT2.OBJ

Предупреждение, что ты переопределяешь переменную в другом модуле. У тебя в проекте несколько глобальных переменных с одним и тем же именем.
Сделай вот так:
unit1.cpp: int count /*= 0*/;
unit1.h: extern int count;
unit2.cpp: #include "unit1.h".
unit3.cpp: #include "unit1.h"
.....


Это сообщение отредактировал(а) 586 - 19.3.2008, 10:56
PM   Вверх
VerLinG
Дата 19.3.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



C переменной прокатило, но...
Когда я стараюсь таким же образом передать структуру и массив объектов, возникает ошибка

в Unit1.h пишу 

Код


extern Temp objects[max];
extern struct a a1;



И выдается ошибка
[C++ Error] Unit2.cpp(16): E2451 Undefined symbol 'object'
PM MAIL   Вверх
586
Дата 19.3.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Объяви структуру в unit1.h, перед extern'ами.
PM   Вверх
VerLinG
Дата 19.3.2008, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



[C++ Error] Unit2.cpp(76): E2451 Undefined symbol 'object'

Все равно возникает вот эта ошибка ( по ходу массив объектов не передается...)
PM MAIL   Вверх
586
Дата 19.3.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(VerLinG @  19.3.2008,  16:26 Найти цитируемый пост)
extern Temp objects[max];
extern struct a a1;

Убери ключевое слово struct. Константа max определена в unit1.h?
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.2383 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.