2015-03-05 20 views

Odpowiedz

17

Jak mówi @Mgetz, prawdopodobnie zapomniałeś o #include <fstream>.

powód, dla którego nie pojawia się błąd i zamiast tego not declaredincomplete type not allowed błąd ma do czynienia z tym, co się dzieje, gdy nie jest typem, który został "forward declared", ale jeszcze nie w pełni zdefiniowany.

Spójrz na ten przykład:

#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); 
} 

Wskazówka nie mogliśmy faktycznie instancję obiektu Foo lub skierować jego zawartość aż po prawdziwym HD. Gdy dostępna jest tylko deklaracja "do przodu", możemy mówić o niej tylko za pomocą wskaźnika lub odnośnika.

To, co się prawdopodobnie dzieje, to nagłówek programu iostream, który w podobny sposób deklarował wartość std::ofstream. Ale rzeczywista definicja std::ofstream znajduje się w nagłówku <fstream>.


(Uwaga:.. W przyszłości należy zapewnić Minimal, Complete, Verifiable Example zamiast tylko jednej funkcji z kodu należy dostarczyć kompletny program, który demonstruje problem ten byłby lepszy, na przykład:

#include <iostream> 

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

... również, "wyjście" jest powszechnie postrzegany jako jeden pełny wyraz, nie dwa "wyjście")

Powiązane problemy