c++ - 模板化运算符重载不能绑定非常量左值引用
问题描述
我尝试了 const 的变体和通过引用传递,但似乎在每个走廊都有问题。此配置给出错误无法将“thingArr&”类型的非常量左值引用绑定到“thingArr”类型的右值我做错了什么?
#include <iostream>
using namespace std;
template <typename T>
class thingArr
{
public:
thingArr(){for(int i=0;i<4;++i)n[i] = 1;}
thingArr(thingArr& mIn){for(int i=0; i<4; ++i)n[i]=mIn.n[i];}
friend std::ostream& operator << (std::ostream& s, thingArr<T>& m)
{
s<<"\n("<<m.n[0]<<", "<<m.n[1]<<", "<<m.n[2]<<", "<<m.n[3]<<")";
return s;
}
friend thingArr operator * (thingArr inThingArr, T inScalar)
{
thingArr out(inThingArr);
for(int i=0;i<4;++i)out.n[i]*=inScalar;
return thingArr(out);
}
T n[4];
};
main(){
thingArr<float> A;
thingArr<float> B;
B = A * .25;
cout <<"A: "<<A<<endl;
cout <<"B: "<<B<<endl;
}
解决方案
感谢 SM,我有一个工作版本:
#include <iostream>
using namespace std;
template <typename T>
class thingArr
{
public:
thingArr(){for(int i=0;i<4;++i)n[i] = 1;}
thingArr(const thingArr& mIn){for(int i=0; i<4; ++i)n[i]=mIn.n[i];}
friend std::ostream& operator << (std::ostream& s, thingArr<T>& m)
{
s<<"\n("<<m.n[0]<<", "<<m.n[1]<<", "<<m.n[2]<<", "<<m.n[3]<<")";
return s;
}
friend thingArr operator * (const thingArr& inThingArr, T inScalar)
{
thingArr out(inThingArr);
for(int i=0;i<4;++i)out.n[i]*=inScalar;
return thingArr(out);
}
T n[4];
};
main(){
thingArr<float> A;
thingArr<float> B;
B = A * .25;
cout <<"A: "<<A<<endl;
cout <<"B: "<<B<<endl;
}
推荐阅读
- c - 在 C 中实现类
- macos - macOS 如何为进程分配堆栈和堆?
- reactjs - 获取后无法访问状态数组
- java - 仅使用不带 ArrayList 的 Random 写入不重复的随机数
- java - 运行这个 java 游戏循环代码来渲染图形正在扼杀性能
- docker - 为什么 docker system prune 没有删除悬空图像,而 docker rmi $(docker images --filter "dangling=true" -q --no-trunc) 没有
- c# - 仅用于一个控制器的 Web API 缓存 DLL 和符号文件
- java - 流的收集功能中组合器的用途是什么?
- r - 如何让 R 代码等待后台 R 会话完成?
- javascript - 模态关闭后停止 jQuery 函数