2011-12-18 11 views
5

क्या open फ़ंक्शन में कुछ प्रकार का प्रतिबंध है कि किस तरह का स्ट्रिंग मान पास किया गया है?संकलन त्रुटि: ifstream :: केवल उद्धरणों में स्ट्रिंग मान स्वीकार करता है और स्ट्रिंग चर नहीं

ifstream file; 
string filename = "output.txt"; 
file.open(filename); 

मैं एक स्ट्रिंग चर के साथ एक स्ट्रिंग मान पारित करने के लिए कोशिश की, लेकिन जब यह संकलित करने के लिए कोशिश करता है, परिणाम ...

agent.cpp:2:20: error: ofstream: No such file or directory 
agent.cpp: In function ‘std::string readingline(std::string)’: 
agent.cpp:11: error: aggregate ‘std::ifstream file’ has incomplete type and cannot be  defined 
agent.cpp: In function ‘int main()’: 
agent.cpp:44: error: aggregate ‘std::ofstream writefile’ has incomplete type and cannot be defined 

दूसरी ओर, जब मैं सिर्फ एक स्ट्रिंग पारित "filename.txt" जैसे उद्धरणों में मूल्य, यह ठीक संकलित करता है और ठीक चलता है।

ifstream file; 
file.open("output.txt"); 

ऐसा क्यों है?

क्या इस समस्या को हल करने का कोई तरीका है?

+0

क्या आपने एक char सरणी को पॉइंटर पास करने का प्रयास किया था? – neeKo

+2

देखें [फ़ाइल नाम के लिए (i | o) fstream एक कॉन्स्ट char * पैरामीटर क्यों लेता है?] (Http://stackoverflow.com/questions/5972151/why-does-iofstream-take-a-const-char- पैरामीटर-के-ए-फाइल-नाम) –

उत्तर

5

अफसोस की बात है, इस प्रकार std::(i|o)fstream के निर्माता और open मानक द्वारा परिभाषित किए गए हैं। file.open(filename.c_str()) का प्रयोग करें।

कुछ मानक पुस्तकालय एक एक्सटेंशन प्रदान करते हैं जो पैरामीटर के रूप में std::string को अनुमति देता है, उदा। दृश्य स्टूडियो।

+0

धन्यवाद Xeo। 'File.open (filename.c_str()) का उपयोग करके 'काम किया। –

+1

यह अब विस्तार नहीं है, लेकिन सी ++ 11 मानक के अनुपालन में है। –

+0

@ बो: रुको, हमें सी ++ 11 में मिला है? मेरे से वह छूट गया होगा। * मानक * – Xeo

1

मुझे लगता है कि आपके त्रुटि संदेश प्रश्न में कोड से असंबंधित हो सकते हैं, लेकिन open एक सी-शैली const char* लेता है और सी ++ string नहीं। इसे सही तरीके से काम करने के लिए आपको कॉल में filename.c_str() का उपयोग करने की आवश्यकता होगी।

+0

सुझाव के लिए धन्यवाद मार्क बी। –

1

मुझे fstream और filename.c_str() को filename.c_str() से गुजरने में समस्या दूर हो गई।

एक अपूर्ण प्रकार के बारे में संदेश इसलिए है क्योंकि आप एक शीर्षलेख खो रहे हैं (शायद वैसे भी, आपने एक पूर्ण उदाहरण नहीं दिखाया है)।

और open एक सी-शैली स्ट्रिंग लेता है, string कक्षा नहीं।

+0

धन्यवाद tpg2114। –

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

  • कोई संबंधित समस्या नहीं^_^