C++ C++;传递变量时发生访问冲突

C++ C++;传递变量时发生访问冲突,c++,C++,这就是我的问题,如果我通过函数将一个变量从类a传递到类B,然后在类B中将该变量传递到其他函数进行测试,那么它工作正常。 但是,如果我将变量从A传递到B,然后尝试将其分配给B类中的变量,它会无缘无故地给出错误 //Globals.h enum TypeofObject { CIRCLE, SQUARE, RECTANGLE, DIAMOND }; //Object.h #include "Globals.h" class Object { void Update(); private:

这就是我的问题,如果我通过函数将一个变量从类a传递到类B,然后在类B中将该变量传递到其他函数进行测试,那么它工作正常。 但是,如果我将变量从A传递到B,然后尝试将其分配给B类中的变量,它会无缘无故地给出错误

//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
}
//Globals.h
枚举类型对象{圆形、方形、矩形、菱形};
//对象.h
#包括“Globals.h”
类对象
{
无效更新();
私人:
对象的类型currentObject;
碰撞检测*游戏碰撞;
};
//Object.cpp
void对象::Update()
{
//在这里做事
游戏冲突->测试冲突(currentObject);
}
//碰撞检测
#包括“Globals.h”
类冲突检测
{
公众:
void testCollision(对象类型currentObject);
私人:
无效检查对象(对象类型currentObject);
对象的类型currentObject;
}
//碰撞检测
void CollisionDetection::testCollision(TypeofObject curObject)
{

currentObject=curObject;//我假设这里的问题是
Object::gameCollision
尚未初始化。之所以正确调用
CollisionDetection::testCollision
函数,是因为您可以将成员函数想象为具有额外隐藏参数的常规函数:

void CollisionDetection_testCollision(CollisionDetection *this,
                                      TypeOfObject curObject);
根据您的定义,函数将正确运行,直到访问此

currentObject = curObject; // this->currentObject = curObject
上一行试图将一些内存设置为与
对象的偏移量。如果
未正确初始化,则函数将因访问冲突而失败


我假设
checkObjects(curObject)
不会失败,因为您没有在该函数中访问
碰撞检测
的任何数据成员。

我猜
对象::游戏碰撞
没有初始化。您当前的对象是私有的,您应该在那里使用指针。让我尝试更“清楚”:在您的碰撞检测类中,尝试使TypeofOObject*currentObject,并在CollisionDetection::testCollision(指针在这里!)中接收指向TypeofObject的指针,然后尝试使currentObject=curObject;@user2093113我们将在GameCollision->testCollision()中获得访问冲突如果Object::GameCollision未初始化。@Jagannath:不一定。请参阅@AfonsoTsukamoto OP是运行时错误,而不是编译错误。