我正在尝试恢复一些旧软件,但问题是该软件是 2003 年使用 MC 和 windows 编写的 Iostream 头文件已从那时的 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)
有人可以建议我出路吗?
最佳答案
operator<<
的原因在 ostreams 上有一个返回类型 ostream&
是这样它就可以被链接起来,如您的示例实现中所示调用:
os << "Diagonal points: " << p1 << " " << p2;
这是该运算符的标准行为,很多代码都依赖于它,因此让它返回其他内容(例如 bool
)是个坏主意。你把它改成了。它应该总是返回 std::ostream&
.
这应该至少可以解决您的一些问题。如果不查看您的其余代码并确切知道编译器在提示哪一行,是否就是所有问题,就不清楚了。
关于c++ - 定义的改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9206302/