Come dice @Mgetz, probabilmente si è dimenticato di #include <fstream>
.
La ragione per cui non ha ottenuto un errore di not declared
e invece questo errore incomplete type not allowed
ha a che fare con ciò che accade quando c'è un tipo che è stato "forward declared", ma non ancora completamente definito.
Guardate questo esempio:
#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);
}
Avviso che non poteva in realtà un'istanza di un oggetto Foo o consultare il suo contenuto fino dopo la vera definizione. Quando abbiamo solo la dichiarazione diretta disponibile, possiamo parlarne solo con un puntatore o un riferimento.
Che cosa sta succedendo è che è stata inclusa un'intestazione iostream che aveva inoltrato il documento std::ofstream
in un modo simile. Ma la definizione attuale di std::ofstream
è nell'intestazione <fstream>
.
(Nota:.. In futuro assicurarsi di fornire un Minimal, Complete, Verifiable Example invece di una funzione dal proprio codice Si dovrebbe fornire un programma completo che illustra il problema Questo sarebbe stato meglio, per esempio:
#include <iostream>
int main() {
std::ofstream outFile("Log.txt");
}
... anche, "uscita" è generalmente vista come una parola completa, non due come "output")
hai incluso ' '? –
Mgetz