#include <iostream>
#include <fstream>
using namespace std;
int main () {
ofstream myfile;
myfile.open ("test.txt");
return 0;
}
fstream получен из iostream, почему мы должны включать обоих в код выше?
Я удалил fstream, однако, существует ошибка с ofstream. Моим вопросом является ofstream, получен из ostream, почему fstream необходим, чтобы заставить его скомпилировать?
Вам необходимо включить fstream
, потому что там находится определение класса ofstream
.
Вы как бы поняли это в обратном порядке: поскольку ofstream
происходит от ostream
, заголовок fstream
включает заголовок iostream
, так что вы можете опустить iostream
, и он все равно будет компилироваться. Но вы не можете пропустить fstream
, потому что тогда у вас нет определения для ofstream
.
Подумайте об этом так. Если я помещу это в ah
:
class A {
public:
A();
foo();
};
И затем я создам класс, производный от A
в bh
:
#include <a.h>
class B : public A {
public:
B();
bar();
};
И затем я хочу написать эта программа:
int main()
{
B b;
b.bar();
return 0;
}
Какой файл мне нужно будет включить? b.h
очевидно. Как я мог включить только a.h
и ожидать, что у меня будет определение для B
?
Помните, что в C и C ++ include
является буквальным. Он буквально вставляет содержимое включенного файла туда, где был оператор include
. Это не похоже на заявление более высокого уровня «дай мне все в этом семействе классов».
std::ofstream
определен в заголовке
стандартной библиотеки.
Вам необходимо включить этот заголовок для его определения, чтобы вы могли его инстанцировать.