2015-03-05 10 views
9

दृश्य स्टूडियो इस अजीब त्रुटि फेंकता:"अपूर्ण प्रकार की अनुमति नहीं" जब std :: ofstream बनाने वस्तुओं

Incomplete type not allowed

जब मैं एक std :: ofstream वस्तु बनाने के लिए प्रयास करें। यहां एक कोड के अंदर लिखा गया कोड है।

void OutPutLog() 
{ 
    std::ofstream outFile("Log.txt"); 
} 

जब भी यह दृश्य स्टूडियो का सामना करता है तो उस त्रुटि को फेंकता है। ऐसा क्यूँ होता है?

+14

आप शामिल था भी, "उत्पादन" आम तौर पर नहीं दो "उत्पादन") के रूप में एक पूर्ण शब्द, के रूप में देखा जाता है ' '? – Mgetz

उत्तर

17

@Mgetz कहते हैं, आप शायद #include <fstream> भूल गए हैं।

कारण आप एक not declared त्रुटि नहीं मिला और इसके बजाय इस incomplete type not allowed त्रुटि क्या होता है वहाँ एक प्रकार है कि "forward declared" कर दिया गया है, लेकिन अभी तक पूरी तरह नहीं परिभाषित किया गया है जब से कोई लेना देना नहीं है। इस उदाहरण को

देखो:

#include <iostream> 

struct Foo; // "forward declaration" for a struct type 

void OutputFoo(Foo & foo); // another "forward declaration", for a function 

void OutputFooPointer(Foo * fooPointer) { 
    // fooPointer->bar is unknown at this point... 
    // we can still pass it by reference (not by value) 
    OutputFoo(*fooPointer); 
} 

struct Foo { // actual definition of Foo 
    int bar; 
    Foo() : bar (10) {} 
}; 

void OutputFoo(Foo & foo) { 
    // we can mention foo.bar here because it's after the actual definition 
    std::cout << foo.bar; 
} 

int main() { 
    Foo foo; // we can also instantiate after the definition (of course) 
    OutputFooPointer(&foo); 
} 

सूचना हम वास्तव में एक फू वस्तु का दृष्टांत नहीं कर सकता है या असली परिभाषा के बाद जब तक इसकी सामग्री देखें। जब हमारे पास केवल आगे की घोषणा उपलब्ध हो, तो हम केवल इसके बारे में सूचक या संदर्भ से बात कर सकते हैं।

क्या हो रहा है कि आप कुछ आईस्ट्रीम हेडर को शामिल करते हैं जिसने std::ofstream को इसी तरह से घोषित किया था। लेकिन std::ofstream की वास्तविक परिभाषा <fstream> शीर्षलेख में है।


(ध्यान दें:।। भविष्य में अपने कोड से बाहर सिर्फ एक समारोह के बजाय एक Minimal, Complete, Verifiable Example प्रदान करना सुनिश्चित करें आप एक पूरा कार्यक्रम है कि समस्या को दर्शाता है की आपूर्ति करना चाहिए यह बेहतर होता उदाहरण के लिए,:

#include <iostream> 

int main() { 
    std::ofstream outFile("Log.txt"); 
} 

...

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