2016-01-29 38 views
0

我有一个向量包含字符串,这个向量上的一个迭代器(_it),我想使用这个迭代器返回一个字符串之一的引用。使用迭代器返回一个字符串的引用

现在,返回被拷贝制作:

std::string myClass::next_token() 
{ 
    std::vector<std::string>::const_iterator old_it = _it++; 
    return *old_it; 
} 

我想这样做(注意&在返回式)

std::string& myClass::next_token() 
{ 
//... 
} 

但我得到以下错误:

从类型的表达‘std::string& {aka std::basic_string<char>&}’类型的参考无效初始化;

回答

3

A const_iterator永远不会给你一个非const参考;您需要使用普通的iterator或返回const string &

2

由于const string &不可修改,因此无法从const string &创建string&。您得到const string &的原因是您使用的是const_iterator。如果您将代码更改为

std::string& myClass::next_token() 
{ 
    std::vector<std::string>::iterator old_it = _it++; 
    return *old_it; 
}