更改定义

时间:2012-02-09 06:20:20

标签: c++ visual-studio-2008 visual-c++ mfc

我正在尝试恢复一些旧软件,但问题是该软件是在2003年用MC编写的,而Windows Iostream Header文件已从iostream.h更改为iostream

所以这个软件有一个3D矩阵库,其功能类似于

friend ostream& operator<< (ostream&, const CMatrix3D<T>&);

这个函数与iostream不再兼容,所以我把它改为:

friend bool operator<< (std::ostream&, const CMatrix3D<T>&);

但现在在此功能之前被称为的一个地方:

friend ostream& operator << (ostream& os, block* bl)
{
vec_3d p1 = bl->points[0]->value();
vec_3d p2 = bl->points[6]->value();
os << "Diagonal points: " << p1 << " " << p2;
return os;

}

然后我将其更改为:

friend bool operator << (std::ostream& os, block* bl)
{
vec_3d p1 = bl->points[0]->value();
vec_3d p2 = bl->points[6]->value();
os << "Diagonal points: " << p1 << " " << p2;
return os;
}

给我这些错误:

error C2297: '<<' : illegal, right operand has type 'const char [2]'

error C2678: binary '<<' : no operator found which takes a left-hand
operand of type 'int' (or there is no acceptable conversion)

有人可以建议我出路吗?

2 个答案:

答案 0 :(得分:1)

ostreams上的operator<<返回类型为ostream&的原因是它可以链接,如示例实现中所示进行调用:

os << "Diagonal points: " << p1 << " " << p2;

这是该运算符的标准行为,并且很多代码都依赖于它,因此让它返回其他内容(例如您将其更改为bool)是一个坏主意。它应该始终返回std::ostream&

这应该至少解决你的一些问题。如果没有看到你的其余代码,并且确切地知道编译器正在抱怨哪一行,这是否是所有问题都不清楚。

答案 1 :(得分:0)

如今要从输入流中删除空格,请使用std::ws输入操纵器。 即。

fp >> ws;

MSDN Reference for std::ws