오류는 AssocArray 외부에있는 type& AssocArray<key, value>::operator[](key& k)
에서 발생합니다. I 오류 메시지가 얻을 내가 왜 혼란 스러워요 :typedef에서 C++ 템플릿 오류
error C2143: syntax error : missing ';' before '&'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
편집 : 나는이 다음 문을 시도
:
typedef typename std::pair<key, value> type;
typedef std::pair<key, value> type;
using type = std::pair<key, value>;
그들 중 하나가 작동하지 않았다입니다.
template <typename key, typename value>
class AssocArray
{
public:
typedef typename std::pair<typename key, typename value> type;
bool addItem(key& k, value& v);
bool isItem(key& k);
type& operator[] (key& k);
protected:
private:
std::vector<type> vecData;
};
template <typename key, typename value>
type& AssocArray<key, value>::operator[](key& k)
{
auto iter = std::find_if(vecData.begin(), vecData.end(),
[&](type& param)
{
return param.first == key;
}
);
if(vecData.end() != iter)
return *iter;
value v;
vecData.push_back(std::make_pair(k, v));
return *vecData.rbegin();
}
template <typename key, typename value>
bool AssocArray<key, value>::isItem(key& k)
{
auto iter = std::find_if(vecData.begin(), vecData.end(),
[&](type& param)
{
return param.first == key;
}
);
return vecData.end() != iter;
}
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;
}
일부 중복 'typename'이 있습니다. – Rapptz
제 편집을 참조하십시오. –
'typedef'가 왜 작동하지 않을지 잘 모르겠습니다. 'type = std :: pair; '을 사용 했습니까? –
Rapptz