2017-11-04 146 views
0

我有以下的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; 
    ~~~^~~~~~~~~~~ 

这个错误是什么意思?我如何解决它?

+0

'stringData'是一个向量,向量不会为'>>'提供重载。你期望什么'inSS >> stringData >> intData;'做什么? – Carcigenicate

+0

这相当简单。它是说你正在使用没有'operator >>'操作符的'basic_istringstream'(即'inSS')和'vector'(即'stringData'和'intData') 'inSS >> stringData >> intData;')。 –

+0

那么我该如何将用户输入存储到矢量中?对于这个任务,我们应该使用istringstream和向量。 – Chase

回答

0

该错误与多种因素有关。首先,让我们来看看这条线:

inSS >> stringData >> intData; 

在这里,你想从istringstream读入一个vector<string>vector<int>。但是,您不能使用流提取操作符从流中读取vector--没有根本原因,这不是标准不允许的。您需要一次读取一个元素的数据,这可能会要求您重写很多代码。

这里还有一个更微妙的问题。这些行不这样做,你认为他们做的:

vector<string> stringData(); 
vector<int> intData(); 

这些线条看起来像他们声明了一个名为vector<string>类型和vector<int>stringDataintData变量,使用默认的构造函数。不幸的是,C++把它们作为函数原型来解释它,不管它是否相信。第一个是名为stringData的函数的原型,它不接受任何参数(因此括号之间的空白)并返回vector<string>,例如。要解决这个问题,请删除括号。只要写

vector<string> stringData; 
vector<int> intData; 

总结:

  • 你需要从根本上进行一些修改你的代码,因为你不能从istringstream读入一个vector。这需要逻辑更新。
  • 您需要通过删除括号来修复先前的两个声明。
相关问题