/ / Modifiable Global Variable c ++ [дубликат] - c ++, глобални променливи

Модифицируем Глобален Променлив C ++ [дубликат] - c ++, глобални променливи

Трябва да включа заглавен файл в няколко CPPфайлове, които съдържат набор от глобални променливи. Но проблемът, който имам, е, че не мога да направя променливите променливи. Мога да инициализирам променливата в заглавния файл или в който и да е от cpp файловете, но когато дойда да го променя, тя няма да се компилира или да създаде 2 променливи на променливата, които са извън обсега на едната и другата. Имам нужда от начин, който да ми позволи да променя стойността във функция.

Пример за използване на статични (създава копия на променливи извън обхвата на другите променливи)

#pragma once

namespace SCE
{
static bool SC_DEBUG = false;
static bool VSYNC = true;
static int SC_LOG_LEVEL = 3;
}

Аз също се опитах да използвам "външен", но и аз нямах късмет.

    #pragma once

namespace SCE
{
extern bool SC_DEBUG;
extern bool VSYNC;
extern int SC_LOG_LEVEL;
}

редактиране Аз получавам грешка "грешка LNK2001: неразрешен външен символ" bool SCE :: VSYNC "(? VSYNC @ SCE @@ 3_NA)", когато се опитвам да редактирате променливата, след като тя е създадена с помощта на външни. това е така

int main()
{
SCE::VSYNC = false;
// ...
}

Решение Използвам настройка на няколко проекта. Така че това, което се случва, е, че "Проект Б" съдържа Глобалния файл с променливи заглавия и CPC, докато "Проект А" се опитва да промени стойността, след като бъде настроен.Сега по някаква причина, тъй като "Проект А" извличане на глобалния променлив заглавен файл, получаването на променливите дефиниции, но не може да се види инициализирането на променливите, като по този начин се изхвърлят странни грешки.

Отговори:

0 за отговор № 1

В заглавния файл дефинирайте променливите с extern:

// globals.h
namespace SCE
{
extern bool SC_DEBUG;
extern bool VSYNC;
extern int SC_LOG_LEVEL;
}

И ги дефинирайте в файл за внедряване:

// globals.cpp
namespace SCE
{
bool SC_DEBUG = false;
bool VSYNC = true;
int SC_LOG_LEVEL = 3;
}

Сега можете да включите заглавката в другите си файлове.


0 за отговор № 2

Вашият въпрос е малко неясен. Изглежда, че сте изправени пред проблем със статичните променливи. Статичните променливи са в състояние да запазят стойността си, дори ако са извън обхвата. Те остават в паметта, докато програмата се изпълни. За например.

#include<stdio.h>
static int i = 0;
int fun()
{
i= i+5;
}

int main()
{
fun();
printf("%d ", i);
i= 10,
printf("%d ", i);
return 0;
}

Изход: 5 10