VC2005中的一个诡异问题及解决办法

近日,在使用VC2005进行编程时,发现使用“添加成员变量向导”为类添加成员变量(或用“添加成员函数向导”添加成员函数)时,会产生一个诡异的错误。具体表现如下:

1)  在任何情况下,添加一个protected类型的变量(或函数),其访问特性都是正常的。

2)  在添加protected类型变量(或函数)之后添加的第一个变量(或函数),其访问特性也是正常的。

3)  在public类型的变量a之后,再添加一个private类型的变量b,其访问类型就不对了,b会被指定成public类型的。自动生成的代码如下:

public:

     int a;

     double b;

查看变量b在类视图中的图标和属性,可以证实其访问特性确为public。

此后再添加公有或私有变量(函数),其访问特性均会被指定为public。

4)  同样,在private类型的变量(或函数)c之后,添加一个public型的变量d,则d会被指定为private类型。

5)  如果在添加了一个public类型的变量(函数)之后,保存并关闭解决方案,重新打开后再添加一个private的变量,也是正常的。反之亦然。

 

怎么样,这个错误够诡异吧。它有时候出错,有时候又正常,而且比较隐秘,不易察觉。我花了很长时间才总结出上述规律的,^_^。添加变量(或函数)是VC中最为常用的功能之一,微软居然会在这个地方出这么大的勺子,真实有点太搞笑了。

那么,什么原因导致了这个错误呢?

上网一查,才知道vs2005和IE8存在冲突,会导致在使用某些向导时弹出脚本错误。这个问题也得到了Visual C++开发小组的官方证实,而添加变量和添加函数的向导就在错误列表之中。详情可访问以下地址:

http://blogs.msdn.com/vcblog/archive/2009/03/28/some-vs2005-and-vs2008-wizards-pop-up-script-error.aspx

按照该文的方法更改注册表之后,发现并没有解决我们的问题。忽然意识到,它解决的是另外一个错误。恰好手边有另一台机器上装的是IE7.0,一试,错误依旧。看来,这是VS2005本身的bug了。如何解决呢?还是依照微软的传统,找补丁呗。

查看了一下自己用的VS2005的版本,发现还没有打SP1补丁包。是不是打上它就能解决问题呢?虽然在其官方文档中并没有提及这个bug,但或许微软早已经知道这个问题了,只是羞于启齿、怕人笑话,偷偷地在补丁包里改回来呢?

先不管它,试试再说,反正打补丁总是有益无害的,顶多浪费一些磁盘空间而已。在微软的官方网页上下载VS2005 sp1,文件名为VS80sp1-KB926604-X86-CHS.exe,430.9M。

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&familyid=bb4a75ab-e2d4-4c96-b39d-37baf6b5b1dc

如果您的操作系统是XP,直接安装不会成功,需要对计算机进行必要的设置才行。详情请访问下面这个网址:http://support.microsoft.com/kb/925336。这里给出主要的步骤:

 

1)依次单击“开始”和“运行”,键入 regedit,然后单击“确定”。

在注册表编辑器中,找到并单击下面的注册表项:

HKEY_LOCAL_MACHINE/Software/Policies/Microsoft/Windows/Safer/CodeIdentifiers

双击“PolicyScope”(如果没有该项就新建一个),将设置从 0 更改为 1。

关闭注册表编辑器。

2)依次单击“开始”、“运行”,键入 cmd,然后单击“确定”以打开命令提示符窗口。

在命令提示符处键入以下命令net stop msiserver,然后按 Enter。

3)启动VS80sp1-KB926604-X86-CHS.exe开始安装过程。

4)安装了程序包之后,重复步骤 1,将 PolicyScope 注册表值更改回 0,重启。

 

一般的机器上,按照上面的步骤操作即可成功。安装过程所用时间也没网上说的要两三个小时,在我的两台机器上测试,均未超过30分钟。

重新启动vs2005,添加变量和函数的功能恢复正常了。

公正地讲,vc2005确实比vc 6.0进步了很多。它的IDE更加强大,可以提高编程的效率和舒适性。另外,它对标准C++提供了更全面的支持,编译器也具有更强的纠错能力。虽然,它会有这样那样的瑕疵,但瑕不掩玉,我们不能因此而因噎废食。

 

PS. IE8.0引发VS2005某些向导脚本错误的问题其实早已解决,如果您的机器上还出现这样的问题,请打好IE的补丁。   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值