2013-06-01 47 views
1

继承人我的问题,如果我通过函数将类A中的变量传递给类B,然后在类B中将该变量传递给其他函数进行测试,那么它工作正常。 但是,如果我传递变量从A到B,则尝试将其分配给类B中的变量,它给人的错误无故传递变量时C++访问冲突

//Globals.h 
enum TypeofObject { CIRCLE, SQUARE, RECTANGLE, DIAMOND }; 

//Object.h 
#include "Globals.h" 
class Object 
{ 
    void Update(); 
private: 
    TypeofObject currentObject; 
    CollisionDetection * gameCollision; 
}; 
//Object.cpp 
void Object::Update() 
{ 
    //Do stuff here 
    gameCollision -> testCollision(currentObject); 
} 

//CollisionDetection.h 
#include "Globals.h" 
class CollisionDetection 
{ 
public: 
    void testCollision(TypeofObject currentObject); 
private: 
    void checkObjects(TypeofObject currentObject); 
    TypeofObject currentObject; 
} 

//CollisionDetection.cpp 
void CollisionDetection::testCollision(TypeofObject curObject) 
{ 
    currentObject = curObject; //<- If I have this then it gives access violation error 

    checkObjects(curObject); //<- Passing it from one function to the next works 
          //fine but I want to assign it to currentObject so 
          //it doesnt need to be passed 
} 
+2

我想'Object :: gameCollision'没有初始化。 – user2093113

+0

你当前的对象是私有的,你应该在那里使用一个指针。让我试着更清楚一点:在你的CollisionDetection类中,尝试制作TypeofObject * currentObject,然后在CollisionDetection :: testCollision(Pointer here!)中接收一个指向TypeofObject的指针,然后尝试使currentObject = curObject; –

+0

@ user2093113如果Object :: gameCollission未初始化,我们将在gameCollission-> testCollision()中获取访问冲突。 – Jagannath

回答

2

我这里假设的问题是Object::gameCollision尚未初始化。该CollisionDetection::testCollision函数调用是否正确,因为你能想象的成员函数作为普通函数获取额外的隐藏参数:

void CollisionDetection_testCollision(CollisionDetection *this, 
             TypeOfObject curObject); 

鉴于你的定义,功能,运行正常,直到其中this访问点:

currentObject = curObject; // this->currentObject = curObject 

上面的行试图设置一些内存在与this对象的偏移处。如果this未正确初始化,则该功能将因访问冲突而失败。

我认为checkObjects(curObject)不会失败,因为您没有访问该函数中CollisionDetection的任何数据成员。