2017-01-29 103 views
-2

我需要在包含一系列全局变量的多个CPP文件中包含头文件。但我遇到的问题是,我似乎不能使变量可以修改。我可以在头文件或任何cpp文件中初始化变量,但是当我改变它时,它将不会编译或创建超出一个和另一个范围的变量的2个实例。我需要一种方法可以让我改变函数中的值。使用可修改的全局变量C++

例静态的(它创建其他变量的范围变量的实例)

#pragma once 

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

香港专业教育学院还利用“的extern”试过,但我要么不得不与没有运气。

#pragma once 

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

编辑 我得到的错误 “错误LNK2001:无法解析的外部符号 ”布尔SCE :: VSYNC“(?VSYNC @ SCE @@ 3_NA)”,当我尝试和编辑变量一旦创建它使用extern。我尝试和编辑它的方式是像这样

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

解决方案 我使用的是多项目的设置。因此,发生的事情是'项目B'包含全局变量头文件和cpp,而'项目A'正试图在设置后更改该值。现在出于某种原因,因为'项目A'只是拉动全局变量头文件,所以它获取变量定义但是看不到变量的初始化,从而抛出一些奇怪的错误。

回答

0

在头文件中定义的变量与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

这不是我有问题,我可以精细创建它们,但是当涉及到编辑它们,我得到的错误错误LNK2001:无法解析的外部符号“布尔SCE :: VSYNC“(?VSYNC @ SCE @@ 3_NA) – 0xen

+0

@ 0xen您是否已将所有文件包含到项目中?如果不包含'globals.cpp',则会出现该错误。 –

+0

是的,它编译并运行良好,当我不尝试编辑如上所示在我的编辑变量。 – 0xen

0

你的问题不太清楚。看来你正面临着静态变量的问题。即使静态变量超出范围,它们也能够保留它们的值。在程序运行之前,它们一直在内存中。例如。

#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