我正在尝试恢复一些旧软件,但问题是该软件是在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)
有人可以建议我出路吗?
答案 0 :(得分:1)
ostreams上的operator<<
返回类型为ostream&
的原因是它可以链接,如示例实现中所示进行调用:
os << "Diagonal points: " << p1 << " " << p2;
这是该运算符的标准行为,并且很多代码都依赖于它,因此让它返回其他内容(例如您将其更改为bool
)是一个坏主意。它应该始终返回std::ostream&
。
这应该至少解决你的一些问题。如果没有看到你的其余代码,并且确切地知道编译器正在抱怨哪一行,这是否是所有问题都不清楚。
答案 1 :(得分:0)