2015-03-05 34 views

risposta

17

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")