2016-03-03 118 views
-1

我有一个全局的static int xMax。当我将xMax的值分配给本地int xLoc时,它将返回零,即分配失败。C++将静态int的值赋给int

int xLoc = xMax; 

xLoc0;如果以其他方式使用xMax,我会遇到类似的问题,例如在for循环for (int i = 0 i < xMax; i++)中,跳过循环。

这是为什么,我该如何解决这个问题,使得xMax可以用作全局变量?

注:最初我分配int xMax;但造成board.obj已经定义链接错误

LNK2005 “诠释GameFunc :: XMAX”(...)

这是正确的int xMaxboard.h中声明,但只在那里和其他地方声明。制作xMaxstatic是建议修复链接器错误MSDN的选项之一,并且确实有效,但会产生上述不良后果。

board.h

namespace GameFuncs 
{ 
    static int xMax; // global x and y dimensions of the board 
    static int yMax; 

    class Square 
    { 
    public: 
     // getters, setters, methods 
    private: 
     // variables 
    }; 
} 

board.cpp

namespace GameFuncs 
{ 
    void Board::Print() 
    { 
     for (int r = 0; r < xMax; r++)  // for each row 
     { 
      // do something 
     } 

    } 
} 

这是在一组一起形成.dll文件中的一个类。即使在调试器中它有它的赋值(10),上面循环中的xMax也会计为0。

+3

目前还不清楚你在哪里定义'xMax'。你可以提供[MCVE]吗? – sfjac

+2

“不起作用...”具有静态存储持续时间的变量是零初始化的,这是您观察到的。请注意,标题中定义的'static'变量几乎肯定不是您想要的。但是,实际上你想要什么? – 5gon12eder

+0

我需要一个在运行时设置的全局变量xMax来调整向量的大小等。在程序初始化期间,xMax被设置为一个值。我希望这个价值无处不在。当我检查调试器时,xMax确实有指定的值,但我不能按照描述将它分配给int。我将用更多信息编辑我的问题。 – jdelange

回答

3

如果你已经将其标记为static,那么你已经创建了一个只能在该源文件中看到的相同名称的新符号。这与其他地方不一样xMax,所以不会有相同的价值。

将东西放入.h文件基本上与将其复制并粘贴到每个源文件中相同。所以如果你的头文件中有一个int xMax,那么这与每个文件中都有一个相同。然后,因为他们不是static(即范围受到限制),所以会发生冲突。

也许你想在你的头文件中使用extern intextern声明该符号存在,但不会尝试去定义它)加上源文件中的一个非extern声明。

0

确保您的静态变量分配要分配其值设置为本地变量之前一定的价值,否则静态INT有默认值0。

相关问题