Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
#1

Переменные в отдельном файле - C++

10.08.2012, 15:50. Просмотров 1747. Ответов 11
Метки нет (Все метки)

Есть вот такая программка из нескольких файлов. Компилируется без ошибок. А сам вопрос в комментарии.

file01.h
C++
1
2
3
4
5
6
7
8
9
#ifndef FILE01_H_
#define FILE01_H_
 
// определение переменных
int cats = 20;
int dogs = 22;
int fleas = 1;      
 
#endif
file02.h
C++
1
2
3
4
5
6
7
8
9
#ifndef FILE02_H_
#define FILE02_H_
 
// Почему переменные, которые определены в file01.h доступны в этом файле?
void mul_cats_2()   { cats *= 2; }
void mul_dogs_2()   { dogs *= 2; }
void mul_fleas_2()  { fleas *= 2; }
 
#endif
main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <windows.h>
#include "file01.h"
#include "file02.h"
using namespace std;
 
int main()
{
    setlocale(0, "");
 
    cout << "cats  = "  << cats  << endl;
    cout << "dogs  = "  << dogs  << endl;
    cout << "fleas = "  << fleas << endl << endl;
 
    mul_cats_2();
    mul_dogs_2();
    mul_fleas_2();
 
    cout << "cats  = "  << cats  << endl;
    cout << "dogs  = "  << dogs  << endl;
    cout << "fleas = "  << fleas << endl << endl;
 
 
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2012, 15:50     Переменные в отдельном файле
Посмотрите здесь:

Функция в отдельном файле - C++
Всем привет! Учусь писать код в разных файлах, возникла проблема с подобным кодом: main.cpp #include &lt;iostream&gt; #include...

Реализация класса в отдельном файле - C++
Изучаю C++ (вернее только начал) по учебнику &quot;Харви М. Дейтел, Пол Дж. Дейтел - Как программировать на C++&quot; и застрял на создании классов в...

Как правильно записать функцию в отдельном файле? - C++
Здравия желаю. Помогите, пожалуйста, разобраться, как записать собственную функцию в отдельном файле? Делаю так, не получается: ...

Объявление функции в отдельном файле (Code::Blocks) - C++
Разбираю объявление функций в отдельных файлах на примере задачи о проверке - является ли пятизначное число палиндромом, т.е. таким числом,...

Как разместить 2 поиска в отдельном заголовочном файле - C++
Как разместить 2 поиска в отдельном заголовочном файле?? Создать файл содержащий сведения о результатах охоты. Данные должны быть...

LNK2019 при вызове метода в отдельном файле - C++
Здравствуйте! У меня такая проблема- линкер жалуется на:error LNK2019: unresolved external symbol &quot;public: char * __thiscall Param&lt;char...

Опять про реализацию класса в отдельном файле - C++
Допустимо ли следующее? есть проект в Visual Studio 2010. в нем следующие файлы: main.cpp - собссно программа MyClass.h -...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
10.08.2012, 15:52     Переменные в отдельном файле #2
Потому что они глобальные. Если сделаешь static int cats то будет в пределах файла. А вообще - заводить глобальные переменные это моветон.
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
10.08.2012, 15:56  [ТС]     Переменные в отдельном файле #3
Цитата Сообщение от PSIAlt Посмотреть сообщение
Потому что они глобальные.
Но ведь нет никакой связи между file01.h и file02.h Это просто два отдельных файла.
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
10.08.2012, 15:57     Переменные в отдельном файле #4
Они доступны, потому что вы включаете файл file01.h (где они объявлены) перед файлом file02.h (где они используются). Если сделать наоборот, то работать не будет. Если и объявлять глобальные переменные, то лучше делать это в cpp файлах, в противном случае, если вы включаете файл с объявлениями по несколько раз в разные файлы, вы получите ошибки компоновщика "символ ... уже определен в файле ..." (никакие include guards не помогут).
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
10.08.2012, 16:08  [ТС]     Переменные в отдельном файле #5
Цитата Сообщение от cossack5 Посмотреть сообщение
Они доступны, потому что вы включаете файл file01.h (где они объявлены) перед файлом file02.h (где они используются). Если сделать наоборот, то работать не будет.
Да, все правильно. Сейчас поменял местами #include "file01.h" и #include "file02.h". программа кучу ошибок выдала Спасибо всем за помощь. Теперь все стало понятно.
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
10.08.2012, 16:10     Переменные в отдельном файле #6
Хотя иногда так можно делать (если включать файл по одному разу), чтобы разбить очень большие cpp на несколько небольших модулей.
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
10.08.2012, 16:16  [ТС]     Переменные в отдельном файле #7
А кто знает, вот PSIAlt написал если сделать их static, то эти переменные будут только в пределах файла. Я вот сейчас сделал все эти переменные static и программа все равно скомпилировалась без ошибок. В чем секрет?
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
10.08.2012, 16:20     Переменные в отдельном файле #8
Цитата Сообщение от Intel~lect Посмотреть сообщение
А кто знает, вот PSIAlt написал если сделать их static, то эти переменные будут только в пределах файла. Я вот сейчас сделал все эти переменные static и программа все равно скомпилировалась без ошибок. В чем секрет?
Static позволяет использовать переменную только в том файле где она объявлена, если файл не .h (cpp, c). В другие (cpp,c) она уже не попадает. Посмотрите здесь: http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx.
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
10.08.2012, 17:52  [ТС]     Переменные в отдельном файле #9
cossack5, Спасибо! С этим вопросом все понятно.

Добавлено через 1 час 18 минут
Опять у меня с этой программой какие-то непонятные вещи происходят.
Цитата Сообщение от cossack5 Посмотреть сообщение
Static позволяет использовать переменную только в том файле где она объявлена, если файл не .h (cpp, c). В другие (cpp,c) она уже не попадает.
У меня все наоборот. Создал новый проект, только вместо .h файлов сделал .cpp файлы и все переменные static. Но они все равно видны в другом .cpp файле .
Подскажите кто-нибудь как сделать чтобы эти переменные были видны только в одном файле.

file01.cpp
C++
1
2
3
static int cats = 20;
static int dogs = 22;
static int fleas = 1;
file02.cpp
C++
1
2
3
void mul_cats_2()   { cats *= 2; }
void mul_dogs_2()   { dogs *= 2; }
void mul_fleas_2()  { fleas *= 2; }
main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <windows.h>
#include "file01.cpp"
#include "file02.cpp"
using namespace std;
 
int main()
{
    mul_cats_2();
    mul_dogs_2();
    mul_fleas_2();
 
    system("pause");
    return 0;
}
Эта программа почему-то компилируется. А по правилам не должна. Потому что переменные cats, dogs и fleas статические и не должны быть видны в другом .cpp файле.
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
10.08.2012, 18:56     Переменные в отдельном файле #10
Не то хотел сказать. Я имел ввиду что переменная static не будет видна через слово extern. Так обычно глобальные нестатичные переменные связывают в пределах одного проекта.
Например,
C++
1
2
3
4
5
6
7
8
9
10
11
12
file01.h
extern int cats; 
file01.cpp
int cats=5; // объявили переменную
main.cpp 
#include "file01.h"
 
int main()
{
cats=5; // эта переменная известна компилятору (т.к. есть в файле file01), но неизвестна компоновщику.
return 0;
}
В вашем же случае все правильно с точки зрения синтаксиса и т.д.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
10.08.2012, 20:26     Переменные в отдельном файле #11
C++
1
2
#include "file01.cpp"
#include "file02.cpp"
Аще отлично включать С++ файлы, мда-мс. static перед переменной говорит, что у нее статическая линковка (доступна линкеру только в пределах этого файла).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2012, 21:53     Переменные в отдельном файле
Еще ссылки по теме:

Деструктор шаблона описанный в отдельном файле не линкуется. Почему? - C++
Есть такой код: файл &quot;a.h&quot; #include &lt;iostream&gt; template &lt; typename T&gt; class A { public: A() { a=0; std::cout &lt;&lt;&quot;c A&quot;&lt;&lt;...

Описание функции шаблонного класса библиотеки в отдельном cpp-файле - C++
Есть библиотека. В файле ARRAYLIST.HPP описан шаблон template &lt;typename _Type&gt; class ArrayList { private: int length; ...

Работа с файлами: как найти слово в отдельном текстовом файле? - C++
Нам даны два файла, нужно в одном файле взять одно слово, во втором файле взять другое слово...и заменить их!!! какие есть идеи?! Язык...

Реализовать определение нового класса в отдельном файле (библиотека пользователя) - C++
1. Реализовать определение нового класса в отдельном файле (библиотека пользователя). 2. Обязательно должны быть реализованы следующие...

Как скажем из главного файла C++ увидеть класс, созданный в отдельном файле? - C++
Как из главного файла C++ увидеть класс, созданный в отдельном файле? Хоть и не новичок в программировании, но только-только начал...


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

Или воспользуйтесь поиском по форуму:
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
10.08.2012, 21:53  [ТС]     Переменные в отдельном файле #12
ForEveR, .cpp файлы включал только ради эксперимента, будет программа рабатать или нет
Yandex
Объявления
10.08.2012, 21:53     Переменные в отдельном файле
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru