Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Porque o compilador acusa erro?


Luiz Rodrigo

Pergunta

Estou criando um pequeno programa, que usa as duas funções da biblioteca read.h, abaixo:

#include <new>
#include <string>
#include <cstdio>
#include <fstream>
using namespace std;
using std::string;

void readstr (string &str, int max = 128) //lê uma string com espaços do teclado
{
    char *p;
    p = new char[max];

    gets (p);
    str = p;
    delete p;
}

void freadstr (ifstream &file, string &str, int max = 128) //lê uma string com espaços de um arquivo
{
    char *p;
    p = new char[max];

    file.getline (p, max);
    str = p;
    delete p;
}
Mas ocorre que quando compilo o projeto, o compilador que utilizo (Visual C++), gera as seguintes mensagens de erro:
c:\meus programas\ptg\read.h(9) : error C2572: 'readstr' : redefinition of default parameter : parameter 2 c:\meus programas\ptg\read.h(8) : see declaration of 'readstr' c:\meus programas\ptg\read.h(9) : error C2084: function 'void readstr(std::string &,int)' already has a body c:\meus programas\ptg\read.h(8) : see previous definition of 'readstr' c:\meus programas\ptg\read.h(19) : error C2572: 'freadstr' : redefinition of default parameter : parameter 3 c:\meus programas\ptg\read.h(18) : see declaration of 'freadstr' c:\meus programas\ptg\read.h(19) : error C2084: function 'void freadstr(std::ifstream &,std::string &,int)' already has a body c:\meus programas\ptg\read.h(18) : see previous definition of 'freadstr'
Aí eu pesquisei no site do Visual Studio sobre o tal erro C2084, que diz que é quando você redefine a mesma função, como no exemplo:
void Func(int);

void Func(int)   // define specialization
{
}

void Func(int)   // C2084 second definition
{
}

Mas aí que eu não entendi: se eu só coloquei uma vez cada função no arquivo (sequer sobrecarreguei-as), como pode acusar esse erro?

Agradeço, desde já, pela ajuda.

Editado por Luiz Rodrigo
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Você não tá usando um "#include <read.h>" em mais de um arquivo?

Como o corpo da função tá dentro do read.h, então se mais de um arquivo incluir esse header, será como se os dois estivessem tentando implementar a mesma função.

Editado por Mnemonic
Link para o comentário
Compartilhar em outros sites

  • 0

Não há problema nenhum em incluir o mesmo header em vários fontes, desde que se faça o controle pelo símbolo do header, como normalmente se faz em qualquer header:

#ifndef READH
#define READH


// o conteúdo aqui...


#endif

Sem esse artifício, praticamento todos os header da biblioteca padrão gerariam erro por duplicidade de símbolos. Mesmo que não precise, acostume-se a fazer isso.

PS: O símbolo pode ser um texto qualquer de sua escolha. Não precisa fazer referência ao nome do header.

Editado por Maligno
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...