이렇게 코드를 작성하려고하면이 컴파일 오류가 발생합니다. 실제로 연산자 []에 과부하가 걸렸습니다. 혼란 스럽습니다. 아무도 도와 줄 수 없습니까? 여기 왜 오류가 발생합니까? 오버로드 된 연산자 []
AssocArray<int, int> ary;
ary.addItem(1, 1);
ary.addItem(2, 1);
ary.addItem(3, 1);
ary.addItem(4, 1);
ary.addItem(5, 1);
ary[5] = 2;//error occur here
오류 메시지이다
error C2679: binary '[' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
...could be 'int &opt::AssocArray<key,value>::operator [](key &)'
with
[
key=int,
value=int
]
while trying to match the argument list '(opt::AssocArray<key,value>, int)'
with
[
key=int,
value=int
]
다음 AssocArray의 구현이다 (참고 : * .H 파일에 위치)
template <typename key, typename value>
class AssocArray
{
public:
typedef typename std::pair<key, value> type;
bool addItem(key& k, value& v);
bool addItem(key k, value v);
bool isItem(key& k);
value& operator[] (key& k);
typename std::vector<type>::iterator begin()
{
return vecData.begin();
}
typename std::vector<type>::iterator end()
{
return vecData.end();
}
protected:
private:
std::vector<type> vecData;
};
template <typename key, typename value>
bool AssocArray<key, value>::addItem(key k, value v)
{
if(isItem(k)) return false;
vecData.push_back(std::make_pair(k, v));
return true;
}
template <typename key, typename value>
value& AssocArray<key, value>::operator[](key& k)
{
auto iter = std::find_if(vecData.begin(), vecData.end(),
[&](type& param)
{
return param.first == k;
}
);
if(vecData.end() != iter)
return iter->second;
value v;
vecData.push_back(std::make_pair(k, v));
return vecData.rbegin()->second;
}
template <typename key, typename value>
bool AssocArray<key, value>::isItem(key& k)
{
auto iter = std::find_if(vecData.begin(), vecData.end(),
[&](type& param) mutable -> bool
{
return param.first == k;
}
);
return vecData.end() != iter;
}
당신의'operator []'는 참조를 받겠다고 선언되었지만'int'라는 리터럴을 전달합니다. – jogojapan
@juanchopanza, 링커 오류가 발생합니다. – iammilind