运算符 [ ] 不匹配
No match for operator [ ]
鉴于方括号不是运算符,我不确定为什么会收到此消息。
在我的 IntSet.h
文件中,我声明了一个看起来像这样的特定函数。
IntSet unions(const IntSet& operand)const;
该文件由一个 IntSet
调用,将另一个 IntSet
作为参数,并且 returns 两个集合的并集。
在我的 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;
已提供且无法更改。
关于我应该如何解决这个问题的任何方向?
I looked into overloading operators, but the square brackets don't seem to be overloadable.
他们绝对是!
所以你这句话暗示你的 IntSet
class 没有 []
括号运算符,但你使用它。错误消息正是这样说的;所以这就是你的问题。
您必须 'forgotten' 才能使 IntSet::operator[](int) const
过载。只需将其添加到您的 class 定义中:
class IntSet {
std::unique_ptr<int[]> buffer;
/* ... */
public:
int& operator[](int i) { return buffer[i]; }
int operator[](int i) const { return buffer[i]; }
};
请注意,由于您未能提供任何详细信息,我猜测您的 class IntSet
的内部结构。
如果您的任务不允许您重载运算符,那么您必须使用语言或标准库提供的运算符。在我上面的代码片段的上下文中,这意味着像在 operand.buffer[i]
中一样直接使用缓冲区的 operator[]
(如果从non-members 是必需的)。
假设setArray
是IntSet
的成员变量,你不能为IntSet
重载operator[]
,那么你对operand[i]
的访问应该是operand.setArray[i]
.
鉴于方括号不是运算符,我不确定为什么会收到此消息。
在我的 IntSet.h
文件中,我声明了一个看起来像这样的特定函数。
IntSet unions(const IntSet& operand)const;
该文件由一个 IntSet
调用,将另一个 IntSet
作为参数,并且 returns 两个集合的并集。
在我的 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;
已提供且无法更改。
关于我应该如何解决这个问题的任何方向?
I looked into overloading operators, but the square brackets don't seem to be overloadable.
他们绝对是!
所以你这句话暗示你的 IntSet
class 没有 []
括号运算符,但你使用它。错误消息正是这样说的;所以这就是你的问题。
您必须 'forgotten' 才能使 IntSet::operator[](int) const
过载。只需将其添加到您的 class 定义中:
class IntSet {
std::unique_ptr<int[]> buffer;
/* ... */
public:
int& operator[](int i) { return buffer[i]; }
int operator[](int i) const { return buffer[i]; }
};
请注意,由于您未能提供任何详细信息,我猜测您的 class IntSet
的内部结构。
如果您的任务不允许您重载运算符,那么您必须使用语言或标准库提供的运算符。在我上面的代码片段的上下文中,这意味着像在 operand.buffer[i]
中一样直接使用缓冲区的 operator[]
(如果从non-members 是必需的)。
假设setArray
是IntSet
的成员变量,你不能为IntSet
重载operator[]
,那么你对operand[i]
的访问应该是operand.setArray[i]
.