解决VC6.0 namespace兼容性问题

本文讨论了VC6.0在处理C++标准库时遇到的namespace兼容性问题,特别是使用<iostream>时重载运算符<<和>>所遇到的困难。错误提示可能误导开发者,问题可能源于<iostream>和<iostream.h>的冲突。解决方案包括避免使用<iostream.h>,不使用全局的using namespace std;,而是单独引入所需的标准库组件。这种方法在VC6.0下能有效避免重载运算符的错误,同时保持代码的迁移性。
摘要由CSDN通过智能技术生成

        由于VC6.0诞生在C++标准之前,所以对标准的兼容性不好,就算打了SP6补丁之后一直还存在着诸多问题。例如,当包含<iostream>头文件,并用using namespace std;进行域声明时就会出现问题。典型的问题是在重载<<或>>操作符时提示函数不能访问私有变量(即使声明为友元函数);或者在重载了运算符之后使用时依然提示运算符没有定义,并且VC6在出现这个问题时给出的错误提示让人摸不着头脑,比方说定义了一个STUDENT类,并为该类重载了>>操作符,

操作符声明为:friend istream& operator>>(istream& is,Student& st);

之前的的头文件包含为#include <iostream>

并且声明using namespace std;

这个时候如果在_tmain()或者main()中定义了ifstream fin;和Student s;并且使用fin>>s;从文件中提取s时就会报类似:

no operator defined which taks left hand operant "ifsteam"的错误,意思是说接收左值类型为ifstream的>>操作符没有定义。

        可以说这个提示是混淆的,问题不是出在ifstream(他是istream的子类,根据子类替换原则可以替换istream),而是为Student类重载的>>函数没有被接收。我不清楚是什么原因导致了这一错误,但是可以猜想是因为<iostream>和<iostream.h>的冲突导致。在VC6.0中可以直接包含头文件<iostream.h>࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值