gjr_rj
(usa Debian)
Enviado em 28/08/2008 - 02:12h
Dá forma que está vai dar erro mesmo, pois falta o ";" depois da definição da classe, isso independente da forma como você usa.
Pode separar sim as definições das implementação, não tem problema, porém vou começar do início.
Para você declarar um método como inline, basta a implementação está dentro do escopo da classe. E caso não queira, implemente fora (sem a definição de inline)
//Arquivo teste.h EXEMPLO 1
class teste
{
private:
int a;
public:
/* alterar é inline pois sua implementação está dentro do escopo da classe */
void altera(int x)
{
a = x;
}
};
//Arquivo teste.h EXEMPLO 2
class teste
{
private:
int a;
public:
void altera(int x);
};
/* Implementação fora, não é inline */
void teste::altera(int x)
{
a = x;
}
Porém se quiser fazer a implementação fora e deseja que seja inline, basta usar a definição inline na implementação do método.
//Arquivo teste.h EXEMPLO 3
class teste
{
private:
int a;
public:
/* não é necessário inline aqui, tanto faz inline void altera ... quanto apenas void altera ... */
void altera(int x);
};
//aqui é necessário o inline
inline void teste::altera(int x)
{
a = x;
}
Em ambos os casos, o include no arquivo principal será da lib teste.h
//Arquivo exec.cpp
/*****************/
#include "teste.h"
/*****************/
int main(void)
{
teste var;
var.altera(10);
return 0;
}
Porém você quer em arquivos separados. Não lembro se neste caso é necessário ou não o uso do inline na declaração do método, estou quase certo que não precisa, mas coloquei com o inline no exemplo só por garantia. Então ficaria assim:
//Arquivo teste.h EXEMPLO 4
class teste
{
private:
int a;
public:
/* não lembro se é necessário ou não o inline neste caso */
inline void altera(int x);
}; // <-- olha o ponto e vírgula.
//Arquivo teste.cpp
/*****************/
#include "teste.h"
/*****************/
//aqui é necessário o inline
inline void teste::altera(int x)
{
a = x;
}
Neste caso o arquivo principal deve dar um include no CPP
//Arquivo exec.cpp
/*****************/
#include "teste.cpp"
/*****************/
int main(void)
{
teste var;
var.altera(10);
return 0;
}
Não sei que compilador está usando, mas eu gosto do gcc.
Espero ter ajudado.