我有以下代码声明了一个重载operator[]
的类,如下所示:
#include <iostream>
#include <vector>
using namespace std;
class BitSet
{
private:
int size;
public:
vector<int> set;
int &operator [] (int index) {
return set[index];
}
BitSet(int nsize = 0)
{
cout << "BitSet creating..." << endl;
size = nsize;
initSet(size);
}
void initSet(int nsize)
{
for (int i = 0; i < nsize; i++)
{
set.push_back(0);
}
}
void setValue(int key, int value)
{
set[key] = value;
}
int getValue(int key, int value)
{
return set[key];
}
};
但是,当我尝试在此代码中使用它时:
#include <iostream>
#include <stdio.h>
#include "BitSet.h"
using namespace std;
int main()
{
BitSet *a;
cout << "Hello world!" << endl;
a = new BitSet(10);
a->setValue(5, 42);
cout << endl << a[5] << endl; // error here
return 0;
}
我收到此错误:
main.cpp|15|ошибка: no match for «operator<<» in «std::cout.std::basic_ostream<_CharT, _Traits>::operator<< [with _CharT = char, _Traits = std::char_traits<char>, std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>](std::endl [with _CharT = char, _Traits = std::char_traits<char>]) << *(a + 200u)»|
我执行operator[]
时出了什么问题?
答案 0 :(得分:9)
此问题与您operator[]
的实施无关。请注意,您已将a
声明为
BitSet *a;
因此,当你写
cout << a[5] << endl;
编译器将其解释为“a
指向的数组中第5位的get元素,然后输出它。”这不是您想要的,它会导致错误,因为BitSet
没有定义operator<<
。 (请注意,您获得的实际错误大约是operator<<
中的BitSet
,而不是约operator[]
。)
尝试将行更改为
cout << (*a)[5] << endl
或者,更好的是,只需声明BitSet
而不将其作为指针。
希望这有帮助!