elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Reservar memoria con new a una clase con varios elementos y constructor.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Reservar memoria con new a una clase con varios elementos y constructor.  (Leído 2,840 veces)
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Reservar memoria con new a una clase con varios elementos y constructor.
« en: 17 Febrero 2012, 02:05 am »

Buenas quería saber cual es el problema de esto.

Personaje *enemy= new[10] Personaje(app,"img/enemy.png");

Me da este error.
error: expected identifier before '[' token|
|3|error: expected `,' or `;' before "Personaje"|
 
Lo que pienso es que no se puede reservar memoria dándole un constructor.
Pongo aquí el código por si me estoy equivocando.
main.cpp
Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. #include <SFML/Window.hpp>
  5. #include <SFML/Graphics.hpp>
  6. #include "personaje.hpp"
  7. #include "rsc/gui.hpp"
  8.  
  9. int main(int *argc,char *argv[]){
  10.    sf::Clock _tiempo;
  11.    sf::Event evento;
  12.    sf::Event eventovacio;
  13.    int _wapp=640;
  14.    int _happ=480;
  15.    float FPS=60;
  16.    float ftime;
  17.    app.Create(sf::VideoMode(640,480,32),"Invasores del Espacio");
  18.    _Declaracion();//botones
  19.    while(1){
  20.        if(_wapp!=app.GetWidth()||_happ!=app.GetHeight()){
  21.            _wapp=app.GetWidth();
  22.            _happ=app.GetHeight();
  23.            app.Close();
  24.            app.Create(sf::VideoMode(_wapp,_happ,32),"RESOLUTION CHANGED");
  25.        }
  26.        ftime=_tiempo.GetElapsedTime();
  27.        if(ftime>1.0/FPS){
  28.            _Eventos(app,evento);
  29.            _Video(app,evento);
  30.            _tiempo.Reset();
  31.            //para que solo ocurra 1 evento seguido
  32.            evento=eventovacio;
  33.        }
  34.    }
  35. }
gui.hpp
Código
  1. sf::RenderWindow app;
  2. Personaje *pj=new Personaje(app,"img/nave.png",true,100,100);
  3. Personaje *enemy= new [10]Personaje(app,"img/enemy.png");
  4. void _Declaracion()
  5. {
  6. };
  7. void _Eventos(sf::RenderWindow &app,sf::Event &evento)
  8. {
  9.    app.GetEvent(evento);
  10.    if(evento.Type==sf::Event::KeyPressed && evento.Key.Code == 256 || evento.Type== sf::Event::Closed)exit(1);
  11.    if(evento.Type==sf::Event::KeyPressed && evento.Key.Code == 'p'){
  12.    cout << "\n:::.PAUSED.:::\n";
  13.    while(1){
  14.        app.GetEvent(evento);
  15.        if(evento.Type==sf::Event::KeyPressed && evento.Key.Code == 'p')break;
  16.        if(evento.Type==sf::Event::KeyPressed && evento.Key.Code == 256 || evento.Type== sf::Event::Closed)exit(1);
  17.        }
  18.    }
  19.  
  20. }
  21. void _Video(sf::RenderWindow &app,sf::Event &evento)
  22. {
  23.    pj->Print();
  24.    app.Display();
  25. };
  26.  
personaje.hpp
Código
  1. class Personaje {
  2.    private:
  3.        sf::RenderWindow *_app;
  4.        sf::Sprite _S;
  5.        sf::Image _I;
  6.        bool _ON;
  7.    public:
  8.        Personaje(sf::RenderWindow&,char*);
  9.        Personaje(sf::RenderWindow &,char*,bool,float,float);
  10.        sf::Sprite GetSprite() {return _S; }
  11.        void Print() {if(_ON==true)_app->Draw(GetSprite());}
  12. };
  13. Personaje::Personaje(sf::RenderWindow &app,char *name){
  14.    _app=&app;
  15.    _ON=false;
  16.    _I.LoadFromFile(name);
  17.    _I.SetSmooth(false);
  18.    _S.SetImage(_I);
  19. };
  20. Personaje::Personaje(sf::RenderWindow &app,char *name,bool on,float x,float y){
  21.    _app=&app;
  22.    _ON=on;
  23.    _I.LoadFromFile(name);
  24.    _I.SetSmooth(false);
  25.    _S.SetImage(_I);
  26.    _S.SetPosition(x,y);
  27. };

PD: Espero solución gracias :)


« Última modificación: 17 Febrero 2012, 02:07 am por Xafi » En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Reservar memoria con new a una clase con varios elementos y constructor.
« Respuesta #1 en: 17 Febrero 2012, 02:14 am »

http://en.wikipedia.org/wiki/New_(C%2B%2B)


En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Reservar memoria con new a una clase con varios elementos y constructor.
« Respuesta #2 en: 17 Febrero 2012, 04:23 am »

Si no me equivoco, no puedes usar el operador new[] para una clase que no tiene constructor por defecto... OJO no recuerdo bien.
En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.142


I'Love...!¡.


Ver Perfil WWW
Re: Reservar memoria con new a una clase con varios elementos y constructor.
« Respuesta #3 en: 17 Febrero 2012, 04:32 am »

Personaje *enemy= new[10] Personaje(app,"img/enemy.png");

mmm no se pero prueba con esto...


Personaje *enemy= new Personaje[10] (app,"img/enemy.png");

o asi;

Personaje *enemy= new Personaje[10] {(app,"img/enemy.png")};

mmm no recuerdo bien... y bueno la cosa es meterle mano... igual releernos la sintasix...

Dulces Lunas!¡.
En línea




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Reservar memoria con new a una clase con varios elementos y constructor.
« Respuesta #4 en: 17 Febrero 2012, 09:12 am »

Si no me equivoco, no puedes usar el operador new[] para una clase que no tiene constructor por defecto... OJO no recuerdo bien.
Que yo sepa todos las clases tienen un constructor por defecto, sino definimos uno el compilador crea uno por defecto
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.703


15 años en el foro.


Ver Perfil WWW
Re: Reservar memoria con new a una clase con varios elementos y constructor.
« Respuesta #5 en: 17 Febrero 2012, 09:55 am »

Initializing Objects Allocated with new.

No explicit per-element initialization can be done when allocating arrays using the new operator; only the default constructor, if present, is called. See Default Arguments for more information.

[10.5] Which constructor gets called when I create an array of Fred objects?

Código
  1. std::vector<Personaje> enemy(10, Personaje(app,"img/nave.png"));
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: Reservar memoria con new a una clase con varios elementos y constructor.
« Respuesta #6 en: 17 Febrero 2012, 11:30 am »

Osea tengo que hace lo que dice eterna Idol. Lo demás no funciona. Toca aprender Vector XD
En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Reservar memoria con new a una clase con varios elementos y constructor.
« Respuesta #7 en: 17 Febrero 2012, 15:39 pm »

Que yo sepa todos las clases tienen un constructor por defecto, sino definimos uno el compilador crea uno por defecto

Es correcto, pero eso sucede solo si no has definido un constructor y él ya definió uno.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines