gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:31 25 4
gpt4 key购买 nike

我正在为我的大学类(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/

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