【发布时间】:2012-07-13 18:09:43
【问题描述】:
我认为我对命名空间和/或静态变量存在根本性的误解。但是我已经尝试过这个测试代码(手动输入,请原谅拼写错误)
test.h:
namespace test{
static int testNum=5;
void setNum(int value);
}
main.cpp:
#include <test.h>
int test::setNum(int value){
testNum=value;
}
int main(){
test::setNum(9);
cout<<test::testNum;
}
当我运行它时,我得到的值是 5,而不是我预期的 9。似乎我有两个 testNum 变量实例,但这似乎与 static 应该做的完全相反。我猜我错误地假设这些特性与它们的 java equivilants 相同......
如果我从我的 testNum 声明中删除静态,我还会收到一条错误消息,指出 testNum 被多次声明,有人可以解释为什么会这样吗?
谢谢
【问题讨论】:
-
您知道
#include的工作原理吗?它复制粘贴指定文件的内容。setNum的定义真的也在main.cpp中吗? -
我没有展示它,但我的 .h 中有标准的 ifNDEF DEF。此外,由于我只在整个程序中包含它一次,它仍然不是问题,对吧?
-
你使用
using namespace test吗? -
你确定只包含一次?
-
请出示真实代码。如果没有包含
test.h的其他文件,您将不会收到多个定义错误。cout<<testNum也应该是cout<<test::testNum
标签: c++ static namespaces