PDA

View Full Version : [C++]Problema con una classe... credo


PeppeTH
17-07-2011, 18:36
Salve ragazzi arrivata l'estate e toltomi dalle scatole un po' di impegni sono tornato a codare un po'.
ho creato una classe, compilo = 0 errori. Un po' stranito (:asd:) avvio la mia applicazione, crasha. :selo: Crasha nel momento stesso in cui la apro uscendomi la finestra di winzozz 7 "app.exe ha smesso di funzionare... blablabla".
Dopo vari tentativi di capire cos'è l'errore ho scoperto che se escludo dal progetto i 2 file (.h e .cpp) della classe il programma parte senza problemi, mentre se i file sono inclusi nel progetto (anche senza aver istanziato alcun oggetto della classe)... va in crash.:fermfum:
Ecco la classe:
.h

class Camera
{
public:
Camera();
//cameraS
void FixedPointCamera(int, int);
void OnHorPgCamera(b2Body*, IND_Surface);
void FixedCenterScreenCamera();
~Camera();
//Param settings
void SetSpeedMove(int);
void SetSpeedRotat(int);
void SetDelta();
IND_Camera2d* cam;

private:
int speedMoveCamera;
int speedRotation;
static float delta;
static int widthWin;
static int heightWin;
};

.cpp

Camera::Camera()
{
cam = new IND_Camera2d(0.0f, 0.0f);
}

void Camera::FixedPointCamera(int pntX, int pntY)
{
SetDelta();
cam->SetPosition(pntX, pntY);
Graphic::mI->Render->SetCamera2d(cam);
}

void Camera::OnHorPgCamera(b2Body* body, IND_Surface backg)
{
SetDelta();
int posX = (int) body->GetPosition().x;
int maxX = backg.GetWidth();
if(posX > (widthWin/2) && posX < (maxX - (widthWin/2)))
cam->SetPosition(posX, heightWin);
else
cam->SetPosition((widthWin/2), (heightWin/2));
Graphic::mI->Render->SetCamera2d(cam);
}

void Camera::FixedCenterScreenCamera()
{
SetDelta();
cam->SetPosition((widthWin/2), (heightWin/2));
Graphic::mI->Render->SetCamera2d (cam);
}
void Camera::SetSpeedMove(int speed)
{
speedMoveCamera = speed;
}

void Camera::SetSpeedRotat(int speed)
{
speedRotation = speed;
}

void Camera::SetDelta()
{
delta = Graphic::mI->Render->GetFrameTime() / 1000.0f;
}

Camera::~Camera()
{
delete cam;
}

float Camera::delta = 0.0f;
int Camera::widthWin = Graphic::mI->Window->GetWidth();
int Camera::heightWin = Graphic::mI->Window->GetHeight();

Grazie in anticipo a quelli che mi aiuteranno :)
P.S. credo possa avere a che fare con l'allocazione dinamica nel costruttore. :rolleyes:

PeppeTH
17-07-2011, 23:56
Risolto :)
Chiudere per favore.

Gimli[2BV!2B]
18-07-2011, 21:41
Colpa dell'inizializzazione dei membri statici?
Quei puntatori puzzano di NULL/random al momento della loro inizializzazione (che avviene molto presto anche se la classe non viene usata).int Camera::widthWin = Graphic::mI->Window->GetWidth();
int Camera::heightWin = Graphic::mI->Window->GetHeight();