gpt4 book ai didi

来自 typedef 的 C++ 模板错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:58 27 4
gpt4 key购买 nike

错误来自type& AssocArray<key, value>::operator[]( key& k )它位于 AssocArray 之外。我很困惑为什么会收到错误消息:

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;
}

最佳答案

作为 n.m.指出,你需要这样的东西:

template <typename key, typename value>
AssocArray<key,value>::type& AssocArray<key, value>::operator[]( key& k )
{
...

或使用 C++11:

template <typename key, typename value>
auto AssocArray<key, value>::operator[]( key& k ) -> type &
{
...

因为 type 是该类的成员,所以直到您进入该类的上下文中时,该名称才为人所知,无论是通过限定它还是等到指定您正在定义一个类(class)成员。

关于来自 typedef 的 C++ 模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17801241/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com