Как @Mgetz говорит, вы, вероятно, забыли #include <fstream>
.
Причины вы не получите ошибку not declared
и вместо этого incomplete type not allowed
ошибки связана с тем, что происходит, когда есть такой тип, который был "forward declared", но еще до конца не определен.
Посмотрите на этот пример:
#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);
}
Заметьте, что мы не могли фактически создать экземпляр объекта Foo или не смотрите его содержимое до после реального определения. Когда у нас есть только доступная декларация, мы можем говорить об этом только по указателю или ссылке.
Возможно, что вы включили некоторый заголовок iostream, который аналогичным образом указывал std::ofstream
. Но фактическое определение std::ofstream
находится в заголовке <fstream>
.
(Примечание.. В будущем обязательно обеспечить Minimal, Complete, Verifiable Example вместо одной функции из кода Вы должны предоставить полную программу, демонстрирующую проблему Это было бы лучше, например:
#include <iostream>
int main() {
std::ofstream outFile("Log.txt");
}
... также, "Выход", как правило, рассматривается в качестве одного полного слова, а не два, как "Выход")
вы включили ' '? –
Mgetz