2011-04-25 31 views
10

मैं std :: getline का उपयोग करने की कोशिश कर रहा हूं, लेकिन मेरा कंपाइलर मुझे बता रहा है कि गेटलाइन की पहचान नहीं की गई है?std कोई सदस्य 'getline' है?

#include <iostream> 
#include <cstdio> 
#include <cmath> 
#include <cstring> 
#include <fstream> 
#include <cstdlib> 

int main(){ 
    using namespace std; 
    string line; 
    ifstream ifile("test.in"); 
    if(ifile.is_open()){ 
     while(ifile.good()){ 
      getline(ifile,line); 
     } 
    } 
} 

उत्तर

20

std::getlinestring शीर्षक में परिभाषित किया गया है।

#include <string> 

इसके अलावा, अपने कोड cstring, cstdio, cmath, या cstdlib से कुछ भी उपयोग नहीं कर रहा; इन्हें परेशान क्यों करें?

संपादित करें:cstring और string हेडर के बारे में भ्रम की स्थिति स्पष्ट करने के लिए, cstring की सामग्री को खींचती है सी क्रम पुस्तकालय केstring.hstd नेम स्पेस में; stringसी का हिस्सा ++ मानक पुस्तकालय है और getline, std::basic_string<> शामिल (और इसके विशेषज्ञताओं std::string और std::wstring), आदि - दो बहुत अलग हेडर।

+0

यह आसान था। ;] – karlphillip

+0

मैंने सोचा था कि सीस्ट्रिंग और स्ट्रिंग एक जैसी थी, लेकिन सीस्ट्रिंग सी ++ के लिए थी? – pighead10

+3

@ पिग हेड: 'सीस्ट्रिंग' सी-इन-सी ++ के लिए है। यह 'std' नेमस्पेस में सभी पुराने सी स्ट्रिंग फ़ंक्शंस (' strlen', आदि) को परिभाषित करता है। – cHao

3

ildjarn बताते हैं के रूप में, समारोह <string> में घोषित किया जाता है, और मैं हैरान हूँ आप में एक त्रुटि नहीं मिला:,

string line; 

इसके अलावा इस:

while(ifile.good()){ 
     getline(ifile,line); 
} 

नहीं है एक पठन लूप लिखने का तरीका। आपको वर्तमान स्ट्रीम स्थिति नहीं, बल्कि पढ़ने के ऑपरेशन की सफलता का परीक्षण करना होगा। आप चाहते हैं:

while(getline(ifile,line)) { 
} 
+0

यह पुराना है, मुझे पता है, लेकिन मैंने सोचा कि मैं सिर्फ चिल्लाऊंगा और बताऊंगा कि रीड लूप के लिए उपर्युक्त विधि "शर्त में असाइनमेंट" के प्रोग्रामिंग कार्डिनल नियम को तोड़ देती है जो सख्त मानकों का उपयोग करते हुए एक त्रुटि फेंक देगी। जबकि ((getline (iFile, लाइन)! == गलत) { । । । } बेहतर होगा – CrazyMerlin

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