我在尝试构建时遇到以下错误:
error: invalid initialization of non-const reference of type "std::vector<......"代码:
class Config {
public:
std::vector<string>& GetValuesForList(std::string listName);
private:
std::map<std::string, std::vector<string> > lists;
};
inline std::vector<string>&
Config::GetValuesForList(std::string listName) {
return lists.find(listName);
}我已经阅读了它,似乎是因为C++临时的原因,但我不确定如何解决它。任何帮助都将不胜感激。
谢谢。
发布于 2011-08-12 19:21:53
map::find返回迭代器。所以你应该使用它的第二个值:
inline std::vector<string>&
Config::GetValuesForList(std::string listName) {
return lists.find(listName)->second;
}发布于 2011-08-12 19:20:45
你想要return lists.find(listName)->second;吗
旁注:对于vector的map来说,lists不是一个很好的名字!
发布于 2011-08-12 19:21:40
map::find()向pair<key,value>返回一个迭代器。
我认为这样写更好:
std::vector<string>& Config::GetValuesForList(std::string listName)
{
return lists[listName];
}如果键listName存在于映射中,那么它将返回相关的值。否则,它将在映射中创建一个新条目,并返回新创建的std::vector<T>,该值将为空。
我还建议你在调用上面的函数之前,添加另一个函数作为bool DoesExist(std::string listName),你可以用它来检查,以避免在找不到密钥的情况下创建新的条目:
bool DoesExist(std::string listName)
{
return lists.find(listName) != lists.end();
}此外,如果将名称lists更改为vecMap会更好。
https://stackoverflow.com/questions/7039304
复制相似问题