Array
(
)

Implementação de classe em arquivo separado

Keitarosan
   - 07 mar 2006

E aew povo,

É o seguinte, to com problemas na implementação de classes em C++, não sei o que estou fazendo errado, eu crio um arquivo ´header´ de extensão h, onde defino toda a classe, e a implementação da classe, eu coloco em um arquivo de mesmo nome, porém com extensão cpp... o problema é quando uso o header que eu criei, ele fala que não acha a implementação dos metodos da classe... Será que estou fazendo algo errado??

exemplo:

class1.h
#Código

#ifndef CLASS1_H
define CLASS1_H

class class1
{
private:
int Membro1;
public:
class1(int Value);
void SetMembro1(int Value);
};

endif


class1.cpp
#Código
include "class1.h"

class1::class1(int Value)
{
SetMembro(Value);
}

void class1::SetMembro(int Value)
{
Membro1 = Value;
}



e tento compilar(estou usando o DEV-CPP):
main.cpp
#Código
#include "class1.h"

int main(int argc, char *argv[])
{
class1 *c = new class1(10);
return 0;
}


Feito isso, consigo a mensagem:
#Código
[Linker error] main.cpp: undefined reference to ´class1::class1(int)´



Massuda
   - 07 mar 2006

O que está acontecendo é que seu projeto não está incluindo o arquivo .CPP com a implementação da classe. Isso depende do compilador utilizado, mas o que você precisa fazer é incluir o arquivo .CPP na lista de arquivos que fazem parte do projeto.


Keitarosan
   - 07 mar 2006

Era exatamente isso :oops:
Funfou legal agora, valew mesmo camarada!

Isso é uma particularidade do compilador que o DevCPP utiliza?? ou tanto faz utilizar qualquer outro compilador como o do Borland C++ Builder ou do Visual C++? Sempre vou ter que dizer onde está a implementação da classe?


Massuda
   - 07 mar 2006


Citação:
Isso é uma particularidade do compilador que o DevCPP utiliza?? ou tanto faz utilizar qualquer outro compilador como o do Borland C++ Builder ou do Visual C++? Sempre vou ter que dizer onde está a implementação da classe?
Você sempre precisa dar uma lista dos arquivos que são necessários para compilar seu programa. O modo como isso é feito depende de compilador para compilador; os mais modernos usam o conceito de projetos, mas o mais antigos trabalham com makefiles.


Keitarosan
   - 07 mar 2006

Isso é muito interessante, finalmente descobri pra que ser o bendito do makefile, pelo que entendi do que você falou, ele faz o papel do projeto, guardando os parametros de compilação e linkedicao... certo?

Bom, muito obrigado Massuda, me adjudou bastante... :wink: