我有一个全局的static int xMax
。当我将xMax
的值分配给本地int xLoc
时,它将返回零,即分配失败。C++将静态int的值赋给int
int xLoc = xMax;
集xLoc
到0
;如果以其他方式使用xMax
,我会遇到类似的问题,例如在for循环for (int i = 0 i < xMax; i++)
中,跳过循环。
这是为什么,我该如何解决这个问题,使得xMax
可以用作全局变量?
注:最初我分配int xMax;
但造成board.obj已经定义链接错误
LNK2005 “诠释GameFunc :: XMAX”(...)
这是正确的int xMax
在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。
目前还不清楚你在哪里定义'xMax'。你可以提供[MCVE]吗? – sfjac
“不起作用...”具有静态存储持续时间的变量是零初始化的,这是您观察到的。请注意,标题中定义的'static'变量几乎肯定不是您想要的。但是,实际上你想要什么? – 5gon12eder
我需要一个在运行时设置的全局变量xMax来调整向量的大小等。在程序初始化期间,xMax被设置为一个值。我希望这个价值无处不在。当我检查调试器时,xMax确实有指定的值,但我不能按照描述将它分配给int。我将用更多信息编辑我的问题。 – jdelange