Я намагаюся написати файл заголовка. Я можу писати прості заголовки, такі як add (int x, y) return x + y; . Але коли я спробував отримати складніше, візуальна студія дала помилку. Я думаю, помилка пов'язана з <fstream>
. Це завжди показує
"помилка C2065:" fstream ": незадекларований ідентифікатор".
Перший рядок мого файлу cpp void get_int(fstream& stream, int offset)
(крім #include<fstream>
) і першим визначенням .h файлу є
#ifndef GET_H
#define GET_H
int get_int(fstream& stream, int offset);
#endif
Виходить так. Що не так з цим кодом?
Відповіді:
3 для відповіді № 1Ви повинні зробити це:
#ifndef GET_H
#define GET_H
#include <fstream>
int get_int(std::fstream& stream, int offset);
#endif
Зверніть увагу на #include <fstream>
і додані std::
префікс. Кваліфікація потрібна, оскільки всі бібліотеки стандартних стандартів C ++ ... речі ... визначені в цьому просторі імен. Не слід додавати using namespace std;
або using std::fstream;
в заголовку, тому що це забруднює глобальний простір імен і перемагає мету існування namespace std
: люди, що включають ваш заголовок, не очікують, що речі будуть втягнуті у глобальний простір імен, що може суперечити іменуванню, яке використовують інші.
2 для відповіді № 2
#include <fstream>
також має бути у вашому файлі заголовка. Він переходить у блок включення перекладу, але його все одно потрібно бачити, оскільки після розширення всередині .cpp-файлу він закінчується над #include fstream. Таким чином ви переконайтеся, що замовлення не вплине на компіляцію, оскільки на місці є захисні включення. Не випробуєте розширити його вдвічі. Також, #pragma once
рятує кошенят.
Причина, коли ваше замовлення дає ті самі помилки, полягає в тому, що у вашому заголовку відсутні "використання std :: gohere" тощо.
Зразок коду як подальший коментар (запобігання забрудненню простору імен):
#ifndef GET_H
#define GET_H
#include <fstream>
using std::fstream;
int get_int(fstream& stream, int offset);
#endif
або (#pragma один раз повинні підтримуватися усіма гідними компіляторами)
#pragma once
#include <fstream>
using std::fstream;
int get_int(fstream& stream, int offset);