我正在将一些C++代码从Windows移植到Linux (并最终移植到OSX)。大量的C++问题都是由于Windows的不合规引起的。我似乎已经克服了这一点,但现在我面临着一个增强问题。
基本上,我想要切分一个字符串,其中感兴趣的子字符串由逗号分隔,并将这些字符串放入字符串向量中。这会在g++中导致错误,但它可以在Visual Studio中很好地编译
这个程序准确地说明了这个问题:
#include <boost/algorithm/string.hpp>
#include <string>
#include <vector>
int main (void) {
std::vector<std::string> str_vec;
std::string str_to_split = "this,is,the,string,to,split";
boost::algorithm::split(str_vec,
str_to_split.substr(1, str_to_split.size()-2),
boost::algorithm::is_any_of(","),
boost::algorithm::token_compress_on);
return 0;
}为了编译我这样做:>> g++ -o foo foo.cpp
这是我的终端输出:
foo.cpp: In function 'int main()':
foo.cpp:11:54: error: invalid initialization of non-const reference type 'std::basic_string<char>&' from an rvalue of type'std::basic_string<char>'
boost::algorithm::split(str_vec,str_to_split.substr(1, str_to_split.size()-2),boost::algorithm::is_an
^
In file included from /usr/include/boost/algorithm/string.hpp:23:0,
from foo.cpp:1:
/usr/include/boost/algorithm/string/split.hpp:140:35: note: initializing argument 2 of 'equenceSequenceT& boost::algorithm::split(SequenceSequenceT&, RangeT&, PredicateT, boost::algorithm::token_compress_mode_type) [with SequenceSequenceT = std::vector<std::basic_string<char> >; RangeT = std::basic_string<char>; PredicateT = boost::algorithm::detail::is_any_ofF<char>]'
inline SequenceSequenceT& split(
^发布于 2016-03-16 05:11:07
此函数接受std::string&,而不是std::string或const std::string&。这意味着您必须将.substr的结果存储在一个中间变量中,然后将该变量传递给boost::algorithm::split。不管怎样,它的代码会更清晰。
顺便说一句,我不知道为什么函数是这样设计的。对我来说似乎很奇怪,但这就对了。
https://stackoverflow.com/questions/36022177
复制相似问题