给定一个简单的类重载'[]'运算符:
class A
{
public:
int operator[](int p_index)
{
return a[p_index];
}
private:
int a[5];
};
我想完成以下任务:
void main()
{
A Aobject;
Aobject[0] = 1; // Problem here
}
在这种情况下如何重置赋值'='运算符以使用'[]'运算符?
答案 0 :(得分:16)
您不会使=
运算符超载。你返回一个参考。
int& operator[](int p_index)
{
return a[p_index];
}
确保同时提供const
版本:
const int& operator[](int p_index) const
{
return a[p_index];
}
答案 1 :(得分:5)
让它返回参考:
int & operator[](int p_index)
{
return a[p_index];
}
请注意,您还需要一个const版本,它确实返回一个值:
int operator[](int p_index) const
{
return a[p_index];
}
答案 2 :(得分:0)
这里的问题是你要返回vaiable a中包含的值。
在main中,你试图分配一个不可用的int变量。
你会看到编译错误“错误C2106:'=':左操作数必须是l值”这样。
表示无法将值分配给不可用的变量。
请将操作符[]重载函数的返回类型更改为引用或指针,它将正常工作。