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 № 1Você 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);