您的位置:首页 > 其它

对重定义错误的小小研究

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.重定义最本质的说法为一个变量有两个或两个以上的身份,即使一个变量仅被定义了一次,但是同时具有局部变量,全局变量的特性.那么就是重定义.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息