如何修复多个声明和多个初始化错误
How do I fix multiple declaration and multiple initialization errors?
样本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
第二个示例留给您作为练习。另外,你的变量名是重复的。
如果你只需要初始化它们,那就直接初始化它们,而不是重新声明它们。
相关文章:
- 使用默认构造函数引用成员变量初始化错误
- 交换机案例语句中的初始化错误
- 英特尔 MKL 稀疏 QR 求解 C++ 返回未初始化错误
- 在模板类中使用"this"会导致参数初始化错误
- 映射的映射集的映射初始化错误
- C++图形初始化错误(语法或丢失文件缺陷?
- QSQLDATABASE:SIGSEV初始化错误
- 映射的 std::for_each() 给出无效的初始化错误
- 初始化错误过多
- C++初始化错误 std::set
- 简单的类构造函数初始化错误
- 组合框初始化错误:无法读取未定义的属性'constructor'
- OpenCV卡尔曼滤波器初始化错误
- C++11动态数组部分列表初始化(错误或误解)
- C++ 静态变量在发布模式下初始化错误
- Visual Studio 2010 SP1 中的 64 位整数初始化错误
- C++libPNG-简单初始化错误
- 结构数组-初始化错误
- 初始化错误
- 我不断收到函数初始化错误.(运行时检查失败 #3)