我不确定为什么我收到此消息,因为方括号不是操作员。
在我的IntSet.h
文件中,我声明了一个看起来像这样的特定函数。
IntSet unions(const IntSet& operand)const;
该文件由IntSet
调用,另一个IntSet
作为参数,并返回两组的并集。
在我的IntSet.cpp
文件中,它看起来像这样。
IntSet IntSet::unions(const IntSet& operand) const
{
IntSet returnSet(50);
for (int i = 0; i < 50; i++){
if (setArray[i] == 1 || operand[i]==1){
if(setArray[i] == 1 ){
returnSet.addElement(setArray[i]);
}
else if(operand[i] == 1){
returnSet.addElement(operand[i]);
}
}
}
return returnSet;
}
我得到的错误来自operand[I] == 1
。
IntSet.cpp|52|error: no match for 'operator[]' (operand types are 'const IntSet' and 'int')
程序不得覆盖任何要启动的操作符。我还应该提到IntSet unions(const IntSet& operand)const;
已提供,也无法更改。
关于如何解决这个问题的方向?
答案 0 :(得分:2)
我查看了重载操作符,但方括号似乎不会超载。
他们绝对是!
因此,您的这句话暗示您的IntSet
班级没有[]
括号运算符,但您使用它。错误信息恰恰说明了这一点;所以这就是你的问题。
答案 1 :(得分:1)
你必须忘记&#39;重载IntSet::operator[](int) const
。只需将其添加到您的班级定义中:
class IntSet {
std::unique_ptr<int[]> buffer;
/* ... */
public:
int& operator[](int i) { return buffer[i]; }
int operator[](int i) const { return buffer[i]; }
};
请注意,由于您未能提供任何详细信息,我猜测您班级IntSet
的内部结构。
如果您的任务不允许您重载运算符,则必须使用语言或标准库提供的那些。在我上面的代码段的上下文中,这意味着直接使用缓冲区operator[]
operand.buffer[i]
(您可能需要buffer
public
成员,如果需要非成员访问)。
答案 2 :(得分:0)
假设.do
是setArray
的成员变量,并且您无法对IntSet
重载operator[]
,那么您对IntSet
的访问权限应该是{{} 1}}。