Như @Mgetz nói, có thể bạn đã quên #include <fstream>
.
Lý do bạn không nhận được lỗi not declared
và thay vào đó lỗi incomplete type not allowed
này liên quan đến những gì xảy ra khi có loại "forward declared" nhưng chưa được xác định đầy đủ.
Nhìn vào ví dụ này:
#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);
}
Chú ý chúng ta có thể không thực sự tạo một đối tượng Foo hoặc tham khảo nội dung của nó cho đến khi sau định nghĩa thực sự. Khi chúng tôi chỉ có tờ khai chuyển tiếp có sẵn, chúng tôi chỉ có thể nói về nó bằng con trỏ hoặc tham chiếu.
Điều có thể xảy ra là bạn đã bao gồm một số tiêu đề iostream đã được tuyên bố trước std::ofstream
theo cách tương tự. Nhưng định nghĩa thực tế của std::ofstream
nằm trong tiêu đề <fstream>
.
(Lưu ý:.. Trong tương lai hãy chắc chắn để cung cấp một Minimal, Complete, Verifiable Example thay vì chỉ một chức năng ra khỏi mã của bạn Bạn nên cung cấp một chương trình hoàn chỉnh chứng tỏ vấn đề này sẽ tốt hơn, ví dụ:
#include <iostream>
int main() {
std::ofstream outFile("Log.txt");
}
... cũng có, "Output" thường được xem như là một từ hoàn chỉnh, chứ không phải hai như "đầu ra")
bạn đã bao gồm ' '? –
Mgetz