样本1>
namespace Exercise {
int ivar = 0;
}
int ivar = 0;
using Exercise::ivar; // <<== error
错误C2874:using-declaration导致多次声明'Exercise :: ivar'
样本2&gt;
namespace Exercise {
double dvar = 0;
}
int main(int argc, char* argv[])
{
using Exercise::dvar;
double dvar = 3.1416; // <<== error
}
error C2374: 'Exercise::dvar' : redefinition; multiple initialization
我很难理解这些错误。有人可以给我一些细节吗?
答案 0 :(得分:2)
namespace Exercise {
int ivar = 0; // create a new variable "::Exercise::ivar"
}
int ivar = 0; // create a new variable ::ivar;
using Exercise::ivar; // add name "::ivar" to variable "::Exercise::ivar", but that name is taken!
下一个例子:
namespace Exercise {
double dvar = 0; // create a new variable "::Exercise::dvar"
}
int _tmain(int argc, _TCHAR* argv[])
{
using Exercise::dvar; // add name "::_tmain(...)::dvar" to variable "::Exercise::dvar"
double dvar = 3.1416; // create a new variable "::_tmain(...)::dvar", but that name is taken!
}
答案 1 :(得分:1)
using
将指定的项目拉入当前命名空间。因此,在示例1中,您将获得名为ivar
的内容,因此这将与您尝试调用ivar
的本地变量冲突。
答案 2 :(得分:0)
通过在变量中附加一个字符或数字来更改名称空间Excercise中的ivar和dvar,然后运行您的代码。错误消息:
error C2374: 'Exercise::dvar' : redefinition; multiple initialization
很明显,你已经用同一个名字重新初始化了。
在第一个示例(示例1)中,您已声明int ivar=0;
,编译器发现ivar
已在Excercise
命名空间中。
您可以将样本1更改为:
namespace Exercise {
int ivar2 = 0;
}
int ivar = 0;
using Exercise::ivar2; // <<== no error
第二个样本留给你作为练习。此外,您的变量名称是重复的。
如果你只是需要初始化它们,请继续初始化它们,而不是重新声明它们。
答案 3 :(得分:0)
您想设置现有变量吗?然后不要重新定义它。
using Exercise::dvar;
dvar = 3.1416;