c++ - 定义的改变

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

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

相关文章:

c++ - Boost.Asio 安装问题

visual-studio-2008 - Visual Studio 中的有序单元测试有什么意义?

visual-studio - 在 Visual Studio 中保留大小写查找/替换

c++ - 从 unique_ptr<T> 的 void* 转换为 T** 是如何工作的?

c++ - 似乎无法在 msvc++ 2010 express 中找到 std::thread

c++ - 'inet_ntoa' 未声明错误

c++ - 带模板的结构的动态分配

c++ - 从注册表 :Code throw unhandled exception 中删除项和子项

c++ - std::vector 在没有交互的情况下被清除

vs 2008 的 C++ std::begin(c)