由于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>