• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

theproject

Problema com classes compostas

6 mensagens neste tópico

Boas, nao sou master em C++ ptt tenho uma duvida que gostava que alguem me explicasse sff.

O prob e o seguinte: tenho uma classe A que tem um la dentro um campo de outra classe B (simples) o meu problema é que quando defino esse campo sou obrigado a escrever

class B _nomeDaVar;

Porque razao é que nao posso escrever apenas

B _nomeDaVar;

?? pensava que ao criar uma classe o C++ fazia logo um typedef com o nome da classe...

Vou postar o código em questao para nao haver dúvidas, gostava mesmo de perceber a razão disto...

(...)
#include <D3d9.h>
#include <d3dx9.h>

#include "world.h"
#include "camera.h"

class worldRenderer{
private:
IDirect3DDevice9* _device;
int _scrHeight;
int _scrWidth;
int _fps;	
world* _w;
        (...)

E a classe world esta definida assim:

#include "linkedList.h"
#include "simpleObject.h"

class world{
private:
linkedList _simpleObjects;	
        (...)

Eu tenho os #ifndef nos .h's e as definicoes das classes nos .h's ... Porque razao o compilador descarrila com o world*_w; ????

Já vi que escrevendo class world* _w; funciona, mas pk?

Desde já agradecido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Seria suposto poderes definir a variavel sem o class antes:

world *_w

Que erro é que apareçe?

P.S. uma classe e um typedef, são coisas totalmente distintas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu sei que sao coisas totalmente diferentes, mas ao contrario do C , o C++ define logo o tipo, algo que em C teria de fazer com

typedef struct _xpto{

    (...)

} xpto;

para poderes usar o tipo xpto.era isso que queria dizer, com " ele faz o typdef logo"

O erro que ele me dava nao era explícito, dizia que faltava um ; antes de _w... continuo sem perceber o porquê de pecisar do token class antes... eu já fiz outras classes algumas compostas e nao precisei... Daí o meu post...

Btw, tou a usar o compilador do visual ++ express..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É complicado responder, mas acho que a fonte do problema não está aí, deve ser algum erro nos constructores ou de incompatibilidade entre as bibliotecas... não sei  ;)

Eu fiz isto e deu normalmente, como não tenho essas bibliotecas pus certas instruções em comentário:

//#include <D3d9.h>
//#include <d3dx9.h>

class world
{
public:
int a;
private:
//linkedList _simpleObjects;
};


class worldRenderer
{
public:
//IDirect3DDevice9* _device;
int _scrHeight;
int _scrWidth;
int _fps;	
world* _w;
};


int main()
{
worldRenderer a;
a._w=new world;
a._w->a=10;
return 0;
};

Cumpr. bk@ero  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:s ... Nao percebo mesmo isto, ou e alguma feature obscura do C++ ou entao existe alguma funcao/classe kk coisa no Direct3D com o mesmo nome, a verdade é que tirando o "class" de lá obtenho :

worldrenderer.h(19) : error C2143: syntax error : missing ';' before '*'

e a partir o compilador comeca a descarrilar porque já nao percebe nd... já metendo o "class" antes tudo compila como suposto...

De qq forma se alguem souber a razao...

cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:s ... Nao percebo mesmo isto, ou e alguma feature obscura do C++ ou entao existe alguma funcao/classe kk coisa no Direct3D com o mesmo nome, a verdade é que tirando o "class" de lá obtenho :

worldrenderer.h(19) : error C2143: syntax error : missing ';' before '*'

e a partir o compilador comeca a descarrilar porque já nao percebe nd... já metendo o "class" antes tudo compila como suposto...

De qq forma se alguem souber a razao...

cumprimentos

Só tendo todos os files/bibliotecas e eu tentar compilar aqui é que talvez consiga ajudar. Só aquilo que estas a dizer... não consigo ver a razão. Nunca tive problemas do género... ;)

Cumpr. bk@ero  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora