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
#include <iostream>
#include <fstream>
using namespace std;
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "personaje.hpp"
#include "rsc/gui.hpp"
int main(int *argc,char *argv[]){
sf::Clock _tiempo;
sf::Event evento;
sf::Event eventovacio;
int _wapp=640;
int _happ=480;
float FPS=60;
float ftime;
app.Create(sf::VideoMode(640,480,32),"Invasores del Espacio");
_Declaracion();//botones
while(1){
if(_wapp!=app.GetWidth()||_happ!=app.GetHeight()){
_wapp=app.GetWidth();
_happ=app.GetHeight();
app.Close();
app.Create(sf::VideoMode(_wapp,_happ,32),"RESOLUTION CHANGED");
}
ftime=_tiempo.GetElapsedTime();
if(ftime>1.0/FPS){
_Eventos(app,evento);
_Video(app,evento);
_tiempo.Reset();
//para que solo ocurra 1 evento seguido
evento=eventovacio;
}
}
}
gui.hpp
sf::RenderWindow app;
Personaje *pj=new Personaje(app,"img/nave.png",true,100,100);
Personaje *enemy= new [10]Personaje(app,"img/enemy.png");
void _Declaracion()
{
};
void _Eventos(sf::RenderWindow &app,sf::Event &evento)
{
app.GetEvent(evento);
if(evento.Type==sf::Event::KeyPressed && evento.Key.Code == 256 || evento.Type== sf::Event::Closed)exit(1);
if(evento.Type==sf::Event::KeyPressed && evento.Key.Code == 'p'){
cout << "\n:::.PAUSED.:::\n";
while(1){
app.GetEvent(evento);
if(evento.Type==sf::Event::KeyPressed && evento.Key.Code == 'p')break;
if(evento.Type==sf::Event::KeyPressed && evento.Key.Code == 256 || evento.Type== sf::Event::Closed)exit(1);
}
}
}
void _Video(sf::RenderWindow &app,sf::Event &evento)
{
pj->Print();
app.Display();
};
personaje.hpp
class Personaje {
private:
sf::RenderWindow *_app;
sf::Sprite _S;
sf::Image _I;
bool _ON;
public:
Personaje(sf::RenderWindow&,char*);
Personaje(sf::RenderWindow &,char*,bool,float,float);
sf::Sprite GetSprite() {return _S; }
void Print() {if(_ON==true)_app->Draw(GetSprite());}
};
Personaje::Personaje(sf::RenderWindow &app,char *name){
_app=&app;
_ON=false;
_I.LoadFromFile(name);
_I.SetSmooth(false);
_S.SetImage(_I);
};
Personaje::Personaje(sf::RenderWindow &app,char *name,bool on,float x,float y){
_app=&app;
_ON=on;
_I.LoadFromFile(name);
_I.SetSmooth(false);
_S.SetImage(_I);
_S.SetPosition(x,y);
};
PD: Espero solución gracias :)
http://en.wikipedia.org/wiki/New_(C%2B%2B)
Si no me equivoco, no puedes usar el operador new[] para una clase que no tiene constructor por defecto... OJO no recuerdo bien.
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!¡.
Cita de: naderST 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.
Que yo sepa todos las clases tienen un constructor por defecto, sino definimos uno el compilador crea uno por defecto
Initializing Objects Allocated with new (http://msdn.microsoft.com/en-us/library/cb6bd5ek.aspx).
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? (http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.5)
std::vector<Personaje> enemy(10, Personaje(app,"img/nave.png"));
Osea tengo que hace lo que dice eterna Idol. Lo demás no funciona. Toca aprender Vector XD
Cita de: RHL en 17 Febrero 2012, 09:12 AM
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.