2017-11-04 80 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。這需要邏輯更新。
  • 您需要通過刪除括號來修復先前的兩個聲明。
相關問題