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")
haben Sie umfassen '? –
Mgetz