C ++ Как получить экземпляр того же класса, что и атрибут? - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь, чтобы класс с именем Cube имел атрибут, который является экземпляром другого куба.

Вот важные части моего Cube.cpp:

bool hasSon = false;
Cube* son;
Cube::Cube()
{
}
void Cube::setSon(Cube* s)
{
    son = s;
    hasSon = true;
}
void Cube::draw() {if(hasSon) {son->draw()}}

А вот и мой куб.h:

    class Cube
{
public:
    Cube();
    bool hasSon;
    Cube* son;
    void setSon(Cube* son);
    void draw();
};

Я создаю экземпляр куба и использую setSon (); вот так:

Cube* base = new Cube();
Cube* base2 = new Cube();
base->setSon(base2);

Проблема, с которой я сталкиваюсь, заключается в том, что у меня возникают ошибки памяти, даже если я никогда не вызываю setSon();, как правильно установить атрибут son?

Вот моя ошибка:

    Exception thrown at 0x00DA3716 in CG_Demo.exe: 0xC0000005: Access violation reading location 0xCDCDCDF1.
Unhandled exception at 0x00DA3716 in CG_Demo.exe: 0xC0000005: Access violation reading location 0xCDCDCDF1.

1 Ответ

0 голосов
/ 29 октября 2018

Вам не нужно hasSon. Вы можете инициализировать указатель на nullptr и использовать его для проверки, установлен ли Cube*. Поскольку предоставленный вами код неполон, трудно сказать, почему вы получаете ошибку, но это работает,

class Cube
{
public:
    Cube();
    //bool hasSon;
    Cube* son;
    void setSon(Cube* son);
    void draw();
};

Cube::Cube() : son(nullptr)
{}

void Cube::setSon(Cube* s)
{
    son = s;
}

void Cube::draw() 
{
    if(son) 
        son->draw();
}


int main()
{
    Cube* base = new Cube();
    Cube* base2 = new Cube();
    base->setSon(base2);
    base->draw();
}

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...