Какая область имеет статическую переменную? - PullRequest
2 голосов
/ 19 февраля 2011

Я пишу простую программу, которая имеет несколько настроек.Настройки - это статические переменные, определенные в заголовочном файле config.h.

Например, внутри config.h:

static int setting1 = 10 ;

В другом файле, kkk.cpp, у меня есть функция, котораяизменяет значение setting1:

void classA::functionA()
{
    setting1=5;
    classB.functionB();
}

Однако в classB.functionB, который определен в файле eee.cpp

void classB::functionB()
{
    int hh=setting1;
    printf("%d",hh);
}

hh, все еще старое значениеиз setting1 (setting1 == 10).

Хотя setting1 является глобальной статической величиной, ее значение нельзя изменить?Почему?

1 Ответ

6 голосов
/ 19 февраля 2011

Если вы объявите переменную области имен как static в заголовочном файле и затем включите этот заголовочный файл в несколько исходных файлов, будет один экземпляр этой переменной на исходный файл, в который она включена.Переменная static namespace-scope имеет внутреннюю связь.

У вас есть несколько вариантов:

  • Объявление переменной в одном из файлов .cpp

  • Объявите переменную как extern в заголовочном файле, а затем определите ее только в одном из файлов .cpp

  • Используйте статическую переменную-член и определитеэто в одном файле .cpp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...