【发布时间】:2014-05-22 20:51:36
【问题描述】:
我正在尝试构建我的一个类,但出现 xtree 违规错误。 这是我构建课程的方式
游戏.h
#pragma once
#include "ImageService.h"
class Game
{
private:
IntroState introState;
public:
ImageService imageService;
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()
{
}
然后进入状态
状态.h
#pragma once
#include "ImageService.h"
class State
{
private:
ImageService imageService;
public:
State( ImageService& is );
~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;
}
}
我到底为什么会收到这个错误?
【问题讨论】:
-
什么是
Sprite?ImageName是什么? -
Images = std::map<Image, sf::Texture>();这看起来不对。Images是map<ImageName, Sprite>,而不是map<Image, sf::Texture> -
Game::Game() : introState(imageService)现在使用imageService是否安全,因为它还没有被构建? -
我也在想也许我的 imageService 还没有构建好
标签: c++ inheritance map