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

How do I fix multiple declaration and multiple initialization errors?

本文关键字:初始化 错误 声明 何修复      更新时间:2023-10-16

样本1>

namespace Exercise {
    int ivar = 0;
}
int ivar = 0;    
using Exercise::ivar; // <<== error

错误C2874: using-declaration导致多次声明'Exercise::ivar'

示例2>

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

我很难理解这些错误。谁能告诉我一点细节吗?

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!
}

using将指定的项拉入当前命名空间。所以在样本1中,你会得到一个叫做ivar的东西,所以这将与你试图调用ivar的局部变量冲突

是否要设置现有变量?那就不要重新定义它。

using Exercise::dvar;
dvar = 3.1416;

通过向变量添加字符或数字来更改名称空间exercise中的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

第二个示例留给您作为练习。另外,你的变量名是重复的。

如果你只需要初始化它们,那就直接初始化它们,而不是重新声明它们。