有关iostream,iostream.h和命名冲突......
看<<STL源码剖析>>时看到一个例子(1.9.4节:increment/decrement/dereference),在vc上不能通过编译,在查找原因的过程中,发现了一个不好理解的怪问题......
如下四个经过简化的小例子中.
//code A:
#include "vector" //
#include "iostream.h"
using namespace std;
class CINT
{
friend ::ostream& operator<<(::ostream& os, const CINT& i) ;
public:
CINT(int i) : m_i(i) { };
private:
int m_i;
};
::ostream& operator<<(::ostream& os, const CINT& i)
{
os << "value : " << i.m_i << endl;
return os;
}
void main()
{
CINT m(5) , n(10);
cout<< m ;
cout << n ;
}
//code B
#include "vector"
#include "iostream.h"
using namespace std;
class CINT
{
friend ::ostream& operator<<(::ostream& os, const CINT& i)
{
os << "value : " << i.m_i << endl;
return os;
}
public:
CINT(int i) : m_i(i) { };
private:
int m_i;
};
void main()
{
CINT m(5) , n(10);
cout<< m ;
cout << n ;
}
//code C
#include "vector" //
#include "iostream"
using namespace std;
class CINT
{
friend ostream& operator<<(ostream& os, const CINT& i)
{
os << "value : " << i.m_i << endl;
return os;
}
public:
CINT(int i) : m_i(i) { };
private:
int m_i;
};
void main()
{
CINT m(5) , n(10);
cout<< m ;
cout << n ;
}
//code D
#include "vector" //
#include "iostream"
using namespace std;
class CINT
{
friend ostream& operator<<(ostream& os, const CINT& i) ;
public:
CINT(int i) : m_i(i) { };
private:
int m_i;
};
ostream& operator<<(ostream& os, const CINT& i)
{
os << "value : " << i.m_i << endl;
return os;
}
void main()
{
CINT m(5) , n(10);
cout<< m ;
cout << n ;
}
前3段代码都是可以正确运行的,第四个却无法通过编译,似乎C和D没什么区别,不知为何?
问题点数:30、回复次数:4Top
1 楼zjh7547()回复于 2006-08-03 17:51:35 得分 0
编译环境:VC6.0,在C++.NET下并没有iostream.h, 将友元操作符定义在类的内部和外部也都行,不存在6.0里的上述问题.Top
2 楼du51(郁郁思扬)回复于 2006-08-03 17:54:25 得分 0
身边没VC是不是VC对标准的支持不好造成的?
我记得原来用VC的时候对友元支持的不好.Top
3 楼jigangwang(wang)回复于 2006-08-03 17:55:50 得分 0
vc对stl和友元支持的都不好,还是用dev c++好Top
4 楼ugg(逸学堂(exuetang.net))回复于 2006-08-03 18:00:28 得分 0
VC7.1没有问题。
#include <vector>//
#include <iostream>Top




