gpt4 book ai didi

c++ - 定义的改变

转载 作者:行者123 更新时间:2023-11-28 08:10:35 27 4
gpt4 key购买 nike

我正在尝试恢复一些旧软件,但问题是该软件是 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com