Jak mówi @Mgetz, prawdopodobnie zapomniałeś o #include <fstream>
.
powód, dla którego nie pojawia się błąd i zamiast tego not declared
incomplete 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")
pan to ' '? –
Mgetz