#ifndef ___YOUR_GLOBALS_H__
#define ___YOUR_GLOBALS_H__
....
//your code
...
#endif
Правильное обьявление переменных...
включил его во все файлы.Линкер говорит,что переменные определены несколько раз,то есть он он пределяет их два раза,сначала в одном файле,затем в другом.
Как этого избежать?
Код:
Код:
#include"globals.h"
//...
int your_var = 1;// В одном из файлов инициализируешь нашу
//переменную - ето определение;
//...
//...
int your_var = 1;// В одном из файлов инициализируешь нашу
//переменную - ето определение;
//...
file2.cpp:
Код:
#include"globals.h"
//...
//...
globals.h:
Код:
....
extern int your_var; // Объявляем внешнию переменную типа int - ето объявление
...
extern int your_var; // Объявляем внешнию переменную типа int - ето объявление
...
Ну и в заголовочном файле желательно использовать стражи включения, но это совсем другая история)
#define int a ?Я думал только символические константы можно.
#define имя_макроса - объявляет макрос препроцессора, ето не существует на этапе компиляции и вся эта конструкция предназначена для неболее одно включения заголовочного файла в единицу компиляции.
YOUR_GLOBALS.h:
Код:
#ifndef ___YOUR_GLOBALS_H__ // Если определен макрос пропускаем всё ниже следующее до endif
#define ___YOUR_GLOBALS_H__ // Определяем макрос
....
//your code
...
#endif
#define ___YOUR_GLOBALS_H__ // Определяем макрос
....
//your code
...
#endif
Теперь в такой конструкции
Код:
#include"YOUR_GLOBALS.h"
#include"YOUR_GLOBALS.h"
#include"YOUR_GLOBALS.h"
файл YOUR_GLOBALS.h будет включаться только один раз.
Это не то о чем ты спрашивал, см. мой ответ выше №3
хочется все их обьявления в один файл скинуть.
И extern - не деректива)
Кстати, Gfunk юзанье глобальных переменных общих для разных модулей твоих еще, есть очень не хорошо.
Если надо какието общие данные - создал бы там функции, которые ими обмениваются.
#define GLOBALS_H 1
далее, во всех фалах куда вставляешь...
#ifndef GLOBALS_H
#include <globals.h>
#endif
А можно сделать так,чтоб все определения были в globals.h,а в file1.cpp и file2.cpp не было бы ни обьявлений ни определений?
Кстати, Gfunk юзанье глобальных переменных общих для разных модулей твоих еще, есть очень не хорошо.
Если надо какието общие данные - создал бы там функции, которые ими обмениваются.[/QUOTE]
Почему?
Программа то одна.Просто код для удобства разбит на файлы.А глоб переменные я хочу в отдельный файл закинуть.
Ты уже так сделал. Не сработало.
Сделай отдельный файл cpp, туда скинь все определения. Это делается с помощью Ctrl+C в globals.h и Ctrl+V на globals.cpp :)
file1.cpp:
Код:
#include"globals.h"
//...
//...
file2.cpp:
Код:
#include"globals.h"
//...
//...
globals.h:
Код:
//....
extern int your_var; // Объявляем внешнию переменную типа int - ето объявление
//...
extern int your_var; // Объявляем внешнию переменную типа int - ето объявление
//...
globals.cpp:
Код:
//...
int your_var = 1;// В одном из файлов инициализируешь нашу
//переменную - ето определение;
//...
int your_var = 1;// В одном из файлов инициализируешь нашу
//переменную - ето определение;
//...
Обычно если и используют глобальные переменные, то для ясности относят ее к одному из модулей, так легче бывает понять, что это за переменная. И ваше лучше гл. переменный не использовать они и так запутывают программу, а ты еще отрываешь ее от контекста.
file1.h:
Код:
extern int your_var;
file1.cpp:
Код:
int your_var = 1;
//...
//...
file2.cpp:
Код:
#include"file1.h"
//...
//...
Сравни эти куски кода.
2 10098: Читай внимательнее и набирайся опыта.
Например, при разработке программ, я использую extern объявление глобальных констант в .h-файле, а значение указываю в .cpp. В первую очередь, это избавляет от необходимости перекомпилировать весь проект при изменении глобального значения для отладки.
Правда, если так скомпилировать пакет, использовать его будет невозможно. Линковщик не обнаружит значения константы, и выдаст "unresolved exern" :(
А макросы условной компиляции в каждом .h никто не отменял.
Код:
#ifndef _Unit1H_
#define _Unit1H_
...
#endif
#define _Unit1H_
...
#endif