对重定义错误的小小研究
2014-03-27 14:23
155 查看
今天,我定义了一个类,这个类中有静态数据成员.
然后出现了让我意外的情况:
范例(失败):
class ll
{
public:
static CMyWinApp a;
};
void main()
{
CMyWinApp ll::a;//即为全局,又为局部,重定义了啊
} 报错为:
1>e:\graduateproject\consoleapplication7\consoleapplication7\console.cpp(12): error C2655: “ll::a”: 当前范围内的定义或重新声明非法
1> e:\graduateproject\consoleapplication7\consoleapplication7\console.cpp(7) : 参见“ll::a”的声明
1>e:\graduateproject\consoleapplication7\consoleapplication7\console.cpp(12): error C2086: “CMyWinApp ll::a”: 重定义
1> e:\graduateproject\consoleapplication7\consoleapplication7\console.cpp(7) : 参见“a”的声明
范例(成功):
class ll
{
public:
static CMyWinApp a;
};
CMyWinApp ll::a;
void main()
{
}
大家也看到了.在main函数中定义ll类的静态数据成员,失败了.可是在外部定义就成功了.而且错误为重定义.
下面是我自己的想法,如果大家觉得不对的话请指正:
类中的static数据成员为全局变量.
若将该变量在main中初始化,则将引起重定义.
因为,一个变量在main中定义则为局部变量.但是该变量因为是类的静态数据成员是全局变量.于是一个变量,有了两个身份:局部变量,全局变量.
在我看来,重定义最本质的说法为一个变量有两个或两个以上的身份.导致程序不知道哪个变量是正确的.
本文的总结为:
1.不要在函数中定义全局变量.
2.重定义最本质的说法为一个变量有两个或两个以上的身份,即使一个变量仅被定义了一次,但是同时具有局部变量,全局变量的特性.那么就是重定义.
然后出现了让我意外的情况:
范例(失败):
class ll
{
public:
static CMyWinApp a;
};
void main()
{
CMyWinApp ll::a;//即为全局,又为局部,重定义了啊
} 报错为:
1>e:\graduateproject\consoleapplication7\consoleapplication7\console.cpp(12): error C2655: “ll::a”: 当前范围内的定义或重新声明非法
1> e:\graduateproject\consoleapplication7\consoleapplication7\console.cpp(7) : 参见“ll::a”的声明
1>e:\graduateproject\consoleapplication7\consoleapplication7\console.cpp(12): error C2086: “CMyWinApp ll::a”: 重定义
1> e:\graduateproject\consoleapplication7\consoleapplication7\console.cpp(7) : 参见“a”的声明
范例(成功):
class ll
{
public:
static CMyWinApp a;
};
CMyWinApp ll::a;
void main()
{
}
大家也看到了.在main函数中定义ll类的静态数据成员,失败了.可是在外部定义就成功了.而且错误为重定义.
下面是我自己的想法,如果大家觉得不对的话请指正:
类中的static数据成员为全局变量.
若将该变量在main中初始化,则将引起重定义.
因为,一个变量在main中定义则为局部变量.但是该变量因为是类的静态数据成员是全局变量.于是一个变量,有了两个身份:局部变量,全局变量.
在我看来,重定义最本质的说法为一个变量有两个或两个以上的身份.导致程序不知道哪个变量是正确的.
本文的总结为:
1.不要在函数中定义全局变量.
2.重定义最本质的说法为一个变量有两个或两个以上的身份,即使一个变量仅被定义了一次,但是同时具有局部变量,全局变量的特性.那么就是重定义.
相关文章推荐
- OPENCV的CvMat定义犯的一个小小错误
- Android编译源码时出现的:<命令行>:0:0: 错误: “_FORTIFY_SOURCE”重定义 [-Werror]
- LINK 2005错误。*** 已经在*.obj文件中定义
- C++中定义结构体对象提示没有合适的默认构造函数可用错误
- Java软件低级错误(十 ):正确定义hashcode
- 2008-07-11 11:54 K3 10.3版 登录时出现 "定义的应用程序或对象错误" 错误代码:1726(6BEH) 的解决方法
- 为什么会出现LNK2005"符号已定义"的链接错误?
- 面对软件错误构建可靠的分布式系统-9案例研究
- erlang 重载函数错误 函数已经定义 function convert/2 already defined
- C# 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节
- FIX:未进行“解除锁定”等导致IE下出现$或jQuery未定义错误
- (已解决!GUID的外部定义和内部定义)VC编译错误:error LNK2001: unresolved external symbol _GUID_DEVINTERFACE_USB_DEVICE
- silverlight中DataGrid错误:data未定义
- Android中的动画具体解释系列【3】——自己定义动画研究
- 继承和多态的一点小小研究
- C# 用数据库读取Excel出现“定义了过多字段”错误
- c++模板函数声明定义分离编译错误详解
- C语言使用const定义数组时的错误原因
- 重回此处,php手册里的取所有错误报告层级的字符定义
- C++错误:重定义 不同的存储类