2012-04-04 4 views
0

내가 때문에 위의 오류의 클래스 객체의 멤버 값을 수정할 수 없습니다 : 내 "개로"개체를 초기화하는 내 초기화 함수를 호출CX0030 : 오류 : 식을 계산할 수 없습니다

, 내가받는 런타임 오류 다음에

"Heretic.exe의 0x01323976에서 처리되지 않은 예외가 발생했습니다. 0xC0000005 : 0x00000008 위치를 읽는 중 액세스 위반이 발생했습니다."

참고 : Garo 클래스는 Object의 하위 클래스입니다.

강령

는 Garo.h

#pragma once 
#include "Object.h" 

class Garo : public Object 
{ 
private: 
    int animationRow; 

public: 
    Garo(); 
    void Destroy(); 

    void Init(ALLEGRO_BITMAP *image = NULL); 
    void Update(); 
    void Render(); 

    void MoveLeft(); 
    void MoveRight(); 
    void Idle(); 
    void SetAnimationRow(int row); 
}; 

Garo.cpp

#include "Garo.h" 

Garo::Garo() 
{ 
    Object::Init(20, 200, 3, 0, 0, 0, 16, 24); 
} 

void Garo::Init(ALLEGRO_BITMAP *image) 
{ 
    Object::Init(20, 200, 3, 0, 0, 0, 16, 24); 

    SetID(PLAYER); 
    SetAlive(true); 

    maxFrame = 3; 
    curFrame = 0; 
    frameWidth = 32; 
    frameHeight = 48; 
    animationColumns = 4; 
    animationDirection = 1; 

    animationRow = 0; 

    if(image != NULL) 
     Garo::image = image; 
} 

는 ... 나머지는 축약 된

내가 런타임 오류가 어디

Object.h

#pragma once 

#include <iostream> 
#include <allegro5/allegro5.h> 
#include <allegro5/allegro_primitives.h> 
#include "Globals.h" 

class Object 
{ 
private: 
    int ID; 
    bool alive; 
    bool collidable; 

protected: 
    float x; 
    float y; 

    float velX; 
    float velY; 

    int dirX; 
    int dirY; 

    int boundX; 
    int boundY; 

    int maxFrame; 
    int curFrame; 
    int frameCount; 
    int frameDelay; 
    int frameWidth; 
    int frameHeight; 
    int animationColumns; 
    int animationDirection; 

    ALLEGRO_BITMAP *image; 

public: 
    Object(); 
    void virtual Destroy(); 

    void Init(float x, float y, float velX, float velY, int dirX, int dirY, int boundX,    int boundY); 
    void virtual Update(); 
    void virtual Render(); 

    float GetX() {return x;} 
    float GetY() {return y;} 

    void SetX(float x) {Object::x = x;} 
    void SetY(float y) {Object::y = y;} 

    int GetBoundX() {return boundX;} 
    int GetBoundY() {return boundY;} 

    int GetID() {return ID;} 
    void SetID(int ID) {Object::ID = ID;} 

    bool GetAlive() {return alive;} 
    void SetAlive(bool alive) {Object::alive = alive;} 

    bool GetCollidable() {return collidable;} 
    void SetCollidable(bool collidable) {Object::collidable = collidable;} 

    bool CheckCollisions(Object *otherObject); 
    void virtual Collided(int objectID); 
    bool Collidable(); 
}; 

Object.cpp

#include "Object.h" 

Object::Object() 
{ 
    x = 0; 
    y = 0; 

    velX = 0; 
    velY = 0; 

    dirX = 0; 
    dirY = 0; 

    boundX = 0; 
    boundY = 0; 

    maxFrame = 0; 
    curFrame = 0; 
    frameCount = 0; 
    frameDelay = 0; 
    frameWidth = 0; 
    frameHeight = 0; 
    animationColumns = 0; 
    animationDirection = 0; 

    image = NULL; 

    alive = true; 
    collidable = true; 
} 

void Object::Init(float x, float y, float velX, float velY, int dirX, int dirY, int boundX, int boundY) 
{ 
    std::cout << "HERE?" << std::endl; 
    Object::x = x; 
    Object::y = y; 

    Object::velX = velX; 
    Object::velY = velY; 

    Object::dirX = dirX; 
    Object::dirY = dirY; 

    Object::boundX = boundX; 
    Object::boundY = boundY; 
} 

호출 코드

Garo *garo; 
// ... 
garo->Init(garo_img); 

이입니다. Allegro 라이브러리를 사용하고 있으므로, 이상한 유형에 대해 물어보십시오. 나는 C++을 배우는 것을 아직도하고있다. 그래서 제게 초보적인 용어를 이해하도록 도와주세요.

답변

5

조작 할 개체 인스턴스를 인스턴스화해야합니다. 예를 들면 다음과 같습니다.

초기화되지 않은 변수에 대해 메소드를 호출하려고합니다. 아마도 객체가 파괴되었는지 확인하기 위해 어떤 형태의 스마트 포인터를 사용할 것을 고려해야합니다.

+0

... 한 번 사용하면 끝납니다. +1. – Cameron

+1

IT WORKED !!! 다윗, 정말 고마워요! – user1313361

관련 문제