@ArtemNewDev

Почему функция в заголовочном файле не видит глобальную переменную?

Читаю книгу Страуструпа и застопарился на одной задаче. Ближе к делу. Имеется три файла: my.h; my.cpp; use.cpp
Содержимое my.h:
extern int foo;
void print_foo();
void print(int);

Содержимое my.cpp:
#include <iostream>
#include "my.h"

using namespace std;

void print_foo(){
    cout << "foo: " << foo << endl;
    return;
}
void print(int i){
    cout << "i: " << i << endl;
    return;
}

Содержимое use.cpp:
#include <iostream>
#include "my.h"

using namespace std;

int main(int argc, char *argv[])
{
    int foo = 7;
    print_foo();
    print(99);
    return 0;
}


Так вот вопрос. Почему функция print_foo (в определяющем файле) не видит переменную, которую я описал в main()? И как это исправить?
  • Вопрос задан
  • 750 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Все, что описано внутри блока (внутри фигурных скобок), видно только внутри этого блока. Это ответ на ваше "почему".

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

Чтобы заработало, нужно int foo = 7 вынести за пределы main.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы