Jump to content

Problema com classes compostas


theproject

Recommended Posts

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.

Link to comment
Share on other 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..

Link to comment
Share on other 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  ?

Link to comment
Share on other 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

Link to comment
Share on other 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  😛

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.