c ++将static int的值赋给int

时间:2016-03-03 20:13:54

标签: c++

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

int xLoc = xMax;

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

为什么会这样,我如何解决这个问题,以便xMax可以用作全局变量?

注意:最初我分配了int xMax;,但这导致了链接器错误

  

LNK2005“int GameFunc :: xMax”(...)已在board.obj中定义

xMax中声明int board.h是正确的,但只有那里和其他地方都没有。制作xMax static是修复链接器错误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。

2 个答案:

答案 0 :(得分:3)

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

将某些内容放入.h文件中与将其复制并粘贴到每个源文件中基本相同。因此,如果您的标头中有int xMax,则与每个文件中都有一个static相同。然后因为他们不是extern int(即范围受限制),就会发生冲突。

您的标题中可能需要extern({{1}}声明该符号存在,但不会尝试定义它)以及源文件中的单个非extern声明。

答案 1 :(得分:0)

在将静态变量赋值给局部变量之前,请确保为静态变量赋值,否则static int的默认值为0。