c++ - 类型转换是如何工作的?

标签 c++

我正在为我的大学类(class)做练习。我偶然发现了以下代码行:

std::cout << (const MaszynaStanow&)m << std::endl;

其中 m 是一个类的对象。

它不编译。我假设它是某种将对象转换为常量引用的方法,对吗?

我还为“<<”重载编写了一个运算符函数,这样我就可以像这样打印出对象持有的值:

std::cout << m;

编译时出现以下错误:

.main.cpp:41:13: error: invalid operands to binary expression('ostream'(aka 'basic_ostream<char>') and 'const MaszynaStanow')
std::cout << (const MaszynaStanow&)m << std::endl;
~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~

这让我觉得我的运算符重载函数不适合这种情况(?)

ostream & operator<<(ostream & stream, MaszynaStanow & obj){
    cout<<"MaszynaStanow:"<<endl;
    for (int i = 0; i < obj.size; ++i){
        stream <<i<<" "<<obj.Next[i]->returnName();
        if (i == obj.chosenMode) cout <<" <";
        cout<<endl;
    }
    return stream;
}

我将不胜感激任何形式的帮助 - 即使是一个小提示。

最佳答案

您显式转换为 const , 但您的运算符(operator)只能处理 MaszynaStanow 的非常量实例.您的运营商应具有以下形式:

ostream & operator<<(ostream & stream, const MaszynaStanow & obj)
                                       ^^^^^
                                       you missed this

如果您需要对象是可修改的,请保持当前版本并且不要将对象强制转换为常量。虽然我不希望 operator<<修改其右处理的操作数,因此 const 应该在那里。

关于c++ - 类型转换是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48789514/

相关文章:

c++ - 将模拟对象作为函数的参数传递

c++ - 如何在c中实现一个类

c++ - 嵌套概念多态模板

c++ - 同时使用多个 SIMD 指令集的好处

c++ - 如何在C++程序中设置自定义断点?

c# - 在 XAML 应用程序中引用 C++ 组件

c++ - 为什么类型转换运算符不适用于继承的类?

c++ - 是否实现定义了哪些算法可以接受可变的 lambda?

c++ - Makefile 没有产生预期的文件输出

c++ - 从 sregex (Boost Xpressive) 中获取原始正则表达式