为什么我在尝试从istringstream中读取数据时出错?
问题描述:
我有以下的C++代码:为什么我在尝试从istringstream中读取数据时出错?
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <iomanip>
#include <cstring>
using namespace std;
int main() {
istringstream inSS;
string title;
string col1;
string col2;
string val;
int numCommas;
vector<string> stringData();
vector<int> intData();
cout << "Enter a title for the data:" << endl;
getline(cin, title);
cout << "You entered: " << title << endl << endl;
cout << "Enter the column 1 header:" << endl;
getline(cin, col1);
cout << "You entered: " << col1 << endl << endl;
cout << "Enter the column 2 header:" << endl;
getline(cin, col2);
cout << "You entered: " << col2 << endl << endl;
while (1) {
cout << "Enter a data point (-1 to stop input):" << endl;
getline(cin, val);
if(strcmp(val.c_str(), "-1") == 0) {
break;
}
inSS >> stringData >> intData;
cout << "Data string: " << stringData << endl;
cout << "Data integer: " << intData << endl;
}
return 0;
}
错误问题:
main.cpp: In function 'int main()': main.cpp:46:9: error: no match for 'operator>>' (operand types are 'std::istringstream {aka std::cxx11::basic_istringstream<char>}' and 'std::vector<std::cxx11::basic_string<char> >()')
inSS >> stringData >> intData;
~~~^~~~~~~~~~~
这个错误是什么意思?我如何解决它?
答
该错误与多种因素有关。首先,让我们来看看这条线:
inSS >> stringData >> intData;
在这里,你想从istringstream
读入一个vector<string>
和vector<int>
。但是,您不能使用流提取操作符从流中读取vector
--没有根本原因,这不是标准不允许的。您需要一次读取一个元素的数据,这可能会要求您重写很多代码。
这里还有一个更微妙的问题。这些行不这样做,你认为他们做的:
vector<string> stringData();
vector<int> intData();
这些线条看起来像他们声明了一个名为vector<string>
类型和vector<int>
的stringData
和intData
变量,使用默认的构造函数。不幸的是,C++把它们作为函数原型来解释它,不管它是否相信。第一个是名为stringData
的函数的原型,它不接受任何参数(因此括号之间的空白)并返回vector<string>
,例如。要解决这个问题,请删除括号。只要写
vector<string> stringData;
vector<int> intData;
总结:
- 你需要从根本上进行一些修改你的代码,因为你不能从
istringstream
读入一个vector
。这需要逻辑更新。 - 您需要通过删除括号来修复先前的两个声明。
'stringData'是一个向量,向量不会为'>>'提供重载。你期望什么'inSS >> stringData >> intData;'做什么? – Carcigenicate
这相当简单。它是说你正在使用没有'operator >>'操作符的'basic_istringstream'(即'inSS')和'vector'(即'stringData'和'intData') 'inSS >> stringData >> intData;')。 –
那么我该如何将用户输入存储到矢量中?对于这个任务,我们应该使用istringstream和向量。 – Chase