/ / Usando o cabeçalho existente no próprio cabeçalho - c ++

Usando o cabeçalho existente no próprio cabeçalho - c ++

Eu estou tentando escrever o arquivo de cabeçalho. Eu posso escrever cabeçalhos simples como add (int x, y) return x + y; . Mas quando tentei ficar mais complicado, o visual studio deu erro. Eu acho que erro está relacionado a <fstream>. Sempre mostra

"erro C2065:" fstream ": identificador não declarado".

Primeira linha do meu arquivo cpp é void get_int(fstream& stream, int offset) (exceto #include<fstream>) e a primeira definição do arquivo .h é

#ifndef GET_H
#define GET_H

int get_int(fstream& stream, int offset);

#endif

É assim. O que está errado neste código?

Respostas:

3 para resposta № 1

Você deve fazer isso:

#ifndef GET_H
#define GET_H

#include <fstream>

int get_int(std::fstream& stream, int offset);

#endif

Observe o #include <fstream> e o adicionado std:: prefixo. A qualificação é necessária porque todas as bibliotecas C ++ Standard ... coisas ... são definidas nesse namespace. Você não deve adicionar um using namespace std; ou using std::fstream; em um cabeçalho, porque isso polui o namespace global e derrota o propósito da existência de namespace std: as pessoas que incluem seu cabeçalho não esperam que as coisas sejam inseridas no namespace global, o que pode conflitar com a nomenclatura usada por outras pessoas.


2 para resposta № 2
#include <fstream>

deve estar no seu arquivo de cabeçalho também. Ele entra na unidade de tradução incluída, mas ainda precisa vê-lo, porque ao expandir dentro do arquivo .cpp, ele acaba acima do #include do fstream. Dessa forma, você garante que a ordem não irá afetar a compilação porque guardas de inclusão estão no lugar. Ela não tentará expandi-la duas vezes. Além disso, #pragma once salva gatinhos.

A razão pela qual a sua encomenda dá os mesmos erros é porque o seu cabeçalho não possui "std :: gohere" etc.

Amostra de código como acompanhamento nos comentários (evitando a poluição do namespace):

#ifndef GET_H
#define GET_H

#include <fstream>
using std::fstream;

int get_int(fstream& stream, int offset);

#endif

ou (#pragma uma vez deve ser suportado por todos os compiladores decentes)

#pragma once

#include <fstream>
using std::fstream;

int get_int(fstream& stream, int offset);