#include<iostream>
#include<string>
#include<cstdlib>
#include<sstream>
#include<vector>
#include <iterator>
using namespace std;
int main()
{
string str;
unsigned int i;
vector<string> arr;
getline(cin,str);
istringstream it(str);
vector<string> arr(istream_iterator<string>(),istream_iterator<string>(it));
arr.push_back('\0');
//boost::split(arr, str, [](char c){return c == ' ';});
//auto splitText = str | view::split(' ');
for(i=0; i<arr.size(); i++){
cout<<arr[i]<<endl;
}
return 0;
}
上面的代码显示如下错误: 错误:“ std :: vector> arr(std :: istream_iterator>(*)(),std :: istream_iterator>)”被重新声明为另一种符号
使用g ++构建时。任何帮助或提示将不胜感激。
答案 0 :(得分:0)
运行g ++时,它还提示问题所在:
a.cpp:13:20: note: previous declaration 'std::vector<std::__cxx11::basic_string<char> > arr' vector<string> arr; ^~~
这意味着您两次声明arr
。首先在第13行,第二次在17行。
这就是
声明为另一种符号
表示。
删除第13行的第一个声明可修复此错误消息,但揭示下一个问题
a.cpp:18:9: error: request for member 'push_back' in 'arr', which is of non-class type 'std::vector<std::__cxx11::basic_string<char> >(std::istream_iterator<std::__cxx11::basic_string<char> > (*)(), std::istream_iterator<std::__cxx11::basic_string<char> >)' arr.push_back('\0'); ^~~~~~~~~
这更复杂,这就是为什么@DietmarKühl将问题重复作为问题Most vexing parse: why doesn't A a(()); work?的原因。在这种情况下,第二个答案是最有用的,并通过在参数周围使用花括号来解决该问题
vector<string> arr{istream_iterator<string>(),istream_iterator<string>(it)};