如何修复多个声明和多个初始化错误?

时间:2011-08-12 19:34:19

标签: c++

样本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

我很难理解这些错误。有人可以给我一些细节吗?

4 个答案:

答案 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;