/ / Використання наявного заголовка у власному заголовку - c ++

Використовуючи існуючий заголовок у власному заголовку - c ++

Я намагаюся написати файл заголовка. Я можу писати прості заголовки, такі як 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);