c++构造函数得到xtree错误

C++ constructor gets xtree error

本文关键字:xtree 错误 构造函数 c++      更新时间:2023-10-16

我试图构建我的一个类,但我得到一个xtree违规错误。下面是我构造类的方法

Game.h

#pragma once
#include "ImageService.h"
class Game
{
private:
    IntroState introState;
public:
    ImageService imageService;
    Game();
    ~Game();
};

game.cpp

Game::Game() : introState(imageService)
{
}

然后转到introState

IntroState.h

<标题> 杂注一次
#include "State.h"
class IntroState : public State
{
public:
    IntroState(ImageService &imageService);
    ~IntroState();
    GameState objectState;
};

IntroState.cpp

#include "IntroState.h"

IntroState::IntroState(ImageService& imageService) : State (imageService)
{
    
}

IntroState::~IntroState()
{
}

然后转到State

State.h

#pragma once
#include "ImageService.h"
class State
{
private:
    ImageService imageService;
public:
    State( ImageService& is );
    ~State();
    
};

State.cpp

#include "State.h"

State::State(ImageService& _imageService)
{
    imageService = _imageService;
}

State::~State()
{
}

然后传递给图像服务的构造函数

ImageService.h

#pragma once
#include <map>
#include "Enums.h"
#include "Sprite.h"
class ImageService
{
public:
    ImageService();
    ~ImageService();
    std::map<ImageName, Sprite> Images;
};

ImageService.cpp

ImageService::ImageService()
{
    Images = std::map<Image, sf::Texture>();
}

ImageService::~ImageService()
{
}

下面是它运行和崩溃的步骤

1 : Game constructor
2 : IntroState constructor
3 : State constructor
4 : ImageService constructor
5 : Images are then set to an empty map
6 : Trying to assign ImageService reference to State
7 : Xtree error shown (Unhandled exception at 0x012BF147 in Dungeon_Wraight.exe: 0xC0000005: Access violation reading location 0x00000004.)

这是xtree

中的函数
template<class _Moveit>
        void _Copy(const _Myt& _Right,
            _Moveit _Movefl)
        {   // copy or move entire tree from _Right
        _Root() = _Copy_nodes(_Right._Root(), this->_Myhead, _Movefl); //Here is the error
        this->_Mysize = _Right.size();
        if (!this->_Isnil(_Root()))
            {   // nonempty tree, look for new smallest and largest
            _Lmost() = this->_Min(_Root());
            _Rmost() = this->_Max(_Root());
            }
        else
            {   // empty tree, just tidy head pointers
            _Lmost() = this->_Myhead;
            _Rmost() = this->_Myhead;
            }
        }

为什么我得到这个错误?

Xtree实现了std::setstd::map的部分内存和时间特性。知道了这一点,错误可以出现在你的代码的两个地方:

  1. ImageService实例在创建IntroState实例之前不能在Game中创建
  2. images初始化错误。如果我正确地知道在SFML sf::Texture不继承Sprite。这是精灵的成员。