2015-03-05 12 views

Antwort

17

Wie @Mgetz sagt, haben Sie wahrscheinlich zu #include <fstream> vergessen.

Der Grund, warum Sie nicht einen not declared Fehler erhalten und stattdessen diese incomplete type not allowed Fehler hat mit dem zu tun, was passiert, wenn ein Typ ist, der "forward declared", aber noch nicht vollständig definiert worden ist.

Schauen Sie sich das Beispiel:

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

Hinweis konnten wir nicht wirklich ein Objekt Foo instanziiert oder dessen Inhalt bis nach die wirkliche Definition beziehen. Wenn wir nur die Forward-Deklaration zur Verfügung haben, können wir nur über Zeiger oder Referenz sprechen.

Was wahrscheinlich passiert, ist, dass Sie einige Iostream Header, die std::ofstream in ähnlicher Weise vorwärts deklariert hatten, enthalten. Aber die tatsächliche Definition von std::ofstream ist in der <fstream> Header.


(Anmerkung:.. Auch in Zukunft sicher sein, ein Minimal, Complete, Verifiable Example statt nur eine Funktion aus Ihrem Code bereitzustellen, sollten Sie ein komplettes Programm liefern, den das Problem demonstriert Dies wäre besser gewesen, zum Beispiel:

#include <iostream> 

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

... auch "Output" wird im allgemeinen als ein komplettes Wort gesehen, nicht zwei als "Output")