2012-03-22 19 views
11

मैं समझने की कोशिश कर रहा हूं कि कैसे stringstream स्ट्रिंग्स के रूप में इनपुट किए गए संभावित संख्याओं को पहचानने और परिवर्तित करने में सक्षम होने के लिए काम करता है ... किसी कारण से मैंने कोड के छोटे टुकड़े को लिखने और समझने के लिए लिखा stringstream कुछ त्रुटियों के साथ कष्टप्रद ...स्ट्रिंगस्ट्रीम त्रुटियों सी ++

#include <iostream> 
#include <string> 

using namespace std; 

int str2int (const string &str) { 
    std::stringstream ss(str); 
    int num; 
    if((ss >> num).fail()) 
    { 
     num = 0; 
     return num; 
    } 
    return num; 
} 

int main(){ 
    int test; 
    int t = 0; 
    std::string input; 
    while (t !=1){ 
     std::cout << "input: "; 
     std::cin >> input; 
     test = str2int(input); 
     if(test == 0){ 
      std::cout << "Not a number..."; 
     }else 
      std::cout << test << "\n"; 
     std::cin >> t; 
    } 
    return 0; 
} 

त्रुटियाँ:

Error C2079:'ss' uses undefined class std::basic_stringstream<_elem,_traits,_alloc>' 
Error C2228: left of '.fail' must have class/struct/union 
Error C2440: 'initializing': cannot convert 'const std::string' into 'int' 

क्या मैं गलत कर रहा हूँ?

+1

त्रुटि संदेशों के पीछे कारण नहीं है, लेकिन एक चीज जो आप गलत कर रहे हैं वह 'स्ट्रिंगस्ट्रीम' का उपयोग कर रही है, जब आपको 'istringstream' का उपयोग करना चाहिए। ('असफल' का उपयोग भी बहुत मूर्ख नहीं है।) –

उत्तर

22

आप निम्न हेडर फाइल को शामिल करने की जरूरत है -

#include <sstream> 

जब भी आप undefined class तरह त्रुटियों को देखने के लिए, आप हमेशा पहले हेडर फाइल लापता के लिए दिखना चाहिए।

Herestringstream वर्ग के लिए दस्तावेज़ है।

1

इस को शामिल करें:

#include <sstream> 

इसके अलावा, इस बारे में:

int main(){ 
    int test; 
    int t = 0; 
    while (t !=1){ 
     std::cout << "input: "; 
     if (std::cin >> test) 
      std::cout << test << "\n"; //read succeeded 
     else 
      std::cout << "Not a number..."; //read failed 
     std::cin >> t; 
    } 
    return 0; 
} 

:

if(ss >> num) //no .fail() 
{ 
    return num; //read succeeded 
} 
return 0; //read failed 

वैसे, आप std::cin >> testmain() में खुद के रूप में इस्तेमाल कर सकते हैंकी कोई ज़रूरत नहीं हैसमारोह!

+1

या बस 'ss >> num वापस करें? संख्या: 0; '? (हालांकि मैं शायद '>>' को एक अलग कथन में अलग कर दूंगा। 'Ss >> num; वापसी एसएस? Num: 0;'।) –

+0

@JamesKanze: यह अच्छा है। :-) – Nawaz

3

stringstream का उपयोग करने के लिए, तुम क्या करने की जरूरत है;

#include <sstream> 

उसके बाद, सबकुछ काम करता है जैसा कि करना चाहिए।

+0

smdh ... मुझे बिस्तर पर जाना चाहिए। उस तरह की कमी की कमी अस्वीकार्य है ... धन्यवाद। –

3

आप sstream शामिल करने के लिए की जरूरत है।

#include <sstream>

2

मैं जोड़ने की जरूरत है - अपनी परियोजना precompiled हेडर का उपयोग करता है (उदाहरण के लिए, Win32 सांत्वना एप्लिकेशन या "pch.h" Windows स्टोर अनुप्रयोग के लिए के लिए "stdafx.h") - कृपया जांच करें कि वे आगे <sstream> की शामिल किए गए हैं ।

संबंधित मुद्दे