簡體   English   中英

傳遞變量時的C ++訪問沖突

[英]C++ Access violation when passing variable

這是我的問題,如果我通過函數將變量從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
}

我認為這里的問題是Object::gameCollision還沒有初始化。 正確調用CollisionDetection::testCollision函數是因為您可以將成員函數想象為帶有額外隱藏參數的常規函數​​:

void CollisionDetection_testCollision(CollisionDetection *this,
                                      TypeOfObject curObject);

鑒於你的定義,功能,運行正常,直到點在哪里this是訪問:

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

上面的行試圖將一些內存設置this對象的偏移量。 如果this是不正確初始化,該函數將失敗,並訪問沖突。

我認為checkObjects(curObject)不會失敗,因為您沒有在該函數中訪問CollisionDetection任何數據成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM