Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Правильное обьявление переменных...

6.1K
25 августа 2006 года
Gfunk
42 / / 31.01.2006
У меня два файла file1.cpp file2.cpp и есть глобальные переменные,которые должны быть доступны из обоих файлов.Я обьявил их в файле globals.h и
включил его во все файлы.Линкер говорит,что переменные определены несколько раз,то есть он он пределяет их два раза,сначала в одном файле,затем в другом.
Как этого избежать?
240
25 августа 2006 года
aks
2.5K / / 14.07.2006
Нпиши в файле globals.h чтонибудь типа такого:
 
Код:
#ifndef ___YOUR_GLOBALS_H__
#define ___YOUR_GLOBALS_H__
....
//your code
...
#endif
1.9K
25 августа 2006 года
[*]Frosty
278 / / 17.06.2006
file1.cpp:
 
Код:
#include"globals.h"
//...
int your_var = 1;// В одном из файлов инициализируешь нашу
                 //переменную - ето определение;
//...


file2.cpp:
 
Код:
#include"globals.h"
//...


globals.h:
 
Код:
....
extern int your_var; // Объявляем внешнию переменную типа int - ето объявление
...


Ну и в заголовочном файле желательно использовать стражи включения, но это совсем другая история)
6.1K
25 августа 2006 года
Gfunk
42 / / 31.01.2006
А разве можно определять переменные с помощью #define например так:
#define int a ?Я думал только символические константы можно.
1.9K
25 августа 2006 года
[*]Frosty
278 / / 17.06.2006
Это страж включения.
#define имя_макроса - объявляет макрос препроцессора, ето не существует на этапе компиляции и вся эта конструкция предназначена для неболее одно включения заголовочного файла в единицу компиляции.

YOUR_GLOBALS.h:

 
Код:
#ifndef ___YOUR_GLOBALS_H__ // Если определен макрос пропускаем всё ниже следующее до endif
#define ___YOUR_GLOBALS_H__ // Определяем макрос
....
//your code
...
#endif

Теперь в такой конструкции
 
Код:
#include"YOUR_GLOBALS.h"
#include"YOUR_GLOBALS.h"

файл YOUR_GLOBALS.h будет включаться только один раз.

Это не то о чем ты спрашивал, см. мой ответ выше №3
6.1K
25 августа 2006 года
Gfunk
42 / / 31.01.2006
Я раньше так и делал с extern директивой.Только,когда переменных много
хочется все их обьявления в один файл скинуть.
1.9K
25 августа 2006 года
[*]Frosty
278 / / 17.06.2006
Все объявления и будут в одном файле, а определения могут быть в разных.
И extern - не деректива)
240
25 августа 2006 года
aks
2.5K / / 14.07.2006
Тфу блин. Криво прочитал вопрос. =))
Кстати, Gfunk юзанье глобальных переменных общих для разных модулей твоих еще, есть очень не хорошо.
Если надо какието общие данные - создал бы там функции, которые ими обмениваются.
15K
25 августа 2006 года
10098
43 / / 25.08.2006
в файле globals.h добавь строку
#define GLOBALS_H 1
далее, во всех фалах куда вставляешь...
#ifndef GLOBALS_H
#include <globals.h>
#endif
6.1K
25 августа 2006 года
Gfunk
42 / / 31.01.2006
А можно сделать так,чтоб все определения были в globals.h,а в file1.cpp и file2.cpp не было бы ни обьявлений ни определений?
6.1K
25 августа 2006 года
Gfunk
42 / / 31.01.2006
[QUOTE=aks]Тфу блин. Криво прочитал вопрос. =))
Кстати, Gfunk юзанье глобальных переменных общих для разных модулей твоих еще, есть очень не хорошо.
Если надо какието общие данные - создал бы там функции, которые ими обмениваются.[/QUOTE]

Почему?
Программа то одна.Просто код для удобства разбит на файлы.А глоб переменные я хочу в отдельный файл закинуть.
15K
25 августа 2006 года
10098
43 / / 25.08.2006
Ты уже так сделал. Не сработало.
350
25 августа 2006 года
cheburator
589 / / 01.06.2006
[QUOTE=Gfunk]А можно сделать так,чтоб все определения были в globals.h,а в file1.cpp и file2.cpp не было бы ни обьявлений ни определений?[/QUOTE]
Сделай отдельный файл cpp, туда скинь все определения. Это делается с помощью Ctrl+C в globals.h и Ctrl+V на globals.cpp :)
1.9K
25 августа 2006 года
[*]Frosty
278 / / 17.06.2006
Вот модификация моего примера, с дополнительным файлом:
file1.cpp:
 
Код:
#include"globals.h"
//...


file2.cpp:
 
Код:
#include"globals.h"
//...


globals.h:

 
Код:
//....
extern int your_var; // Объявляем внешнию переменную типа int - ето объявление
//...


globals.cpp:

 
Код:
//...
int your_var = 1;// В одном из файлов инициализируешь нашу
                 //переменную - ето определение;
//...


Обычно если и используют глобальные переменные, то для ясности относят ее к одному из модулей, так легче бывает понять, что это за переменная. И ваше лучше гл. переменный не использовать они и так запутывают программу, а ты еще отрываешь ее от контекста.

file1.h:
 
Код:
extern int your_var;


file1.cpp:
 
Код:
int your_var = 1;
//...


file2.cpp:
 
Код:
#include"file1.h"
//...


Сравни эти куски кода.

2 10098: Читай внимательнее и набирайся опыта.
309
20 сентября 2006 года
el scorpio
1.1K / / 19.09.2006
При использовании extern может быть одна заморочка.
Например, при разработке программ, я использую extern объявление глобальных констант в .h-файле, а значение указываю в .cpp. В первую очередь, это избавляет от необходимости перекомпилировать весь проект при изменении глобального значения для отладки.

Правда, если так скомпилировать пакет, использовать его будет невозможно. Линковщик не обнаружит значения константы, и выдаст "unresolved exern" :(

А макросы условной компиляции в каждом .h никто не отменял.
 
Код:
#ifndef _Unit1H_
#define _Unit1H_
...
#endif
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог