-- まず第一に、クラスや関数では宣言せずに名前空間で宣言した場合、そのベクトルを「グローバル ベクトル」として呼び出すことができるかどうかがわかりません。--
私は今、自分のゲーム用のシンプルな Irrlicht ( http://irrlicht.sourceforge.net ) ラッパーを作成して物事を単純化して簡単にしていますが、最近、宣言されたベクトルを push_back しようとすると、「アクセス違反の読み取り場所」エラーが発生しましたグローバルスコープ。
これまでの私のコードは次のとおりです。
irrwrap.cpp:
namespace irrw
{
//.........
IrrlichtDevice *device;
IVideoDriver *driver;
irr::core::array<irr::video::ITexture*> TextureCollector;
vector<int> TextureConnector;
//.........
}
//..............
void irrInit(int iGraphicsDriver, int iWindowWidth, int iWindowHeight, int iScreenDepth, bool bFullScreen)
{
E_DRIVER_TYPE drvT;
if(iGraphicsDriver == GD_SOFTWARE)
drvT = EDT_SOFTWARE;
else if(iGraphicsDriver == GD_D3D8)
drvT = EDT_DIRECT3D8;
else if(iGraphicsDriver == GD_D3D9)
drvT = EDT_DIRECT3D9;
else if(iGraphicsDriver == GD_OPENGL)
drvT = EDT_OPENGL;
//..............
irrw::device = createDevice(drvT, dimension2d<u32>(iWindowWidth, iWindowHeight), iScreenDepth, bFullScreen);
irrw::driver = irrw::device->getVideoDriver();
//..................
}
void irrLoadImage(irr::core::stringc szFileName, int iID, int iTextureFlag)
{
//........
irrw::TextureCollector.push_back(irrw::driver->getTexture(szFileName)); // the call stack pointed to this line
irrw::TextureConnector.push_back(iID);
}
main.cpp:
//.........
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
{
//.........
irrInit(GD_OPENGL, 800, 600, 16, false);
irrLoadImage("picture.jpg", 100, 1);
//.........
}
そしてエラー:
Game.exe の 0x692804d6 で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000558。
今、私は問題を解決する方法が本当にわかりませんでした。
どんな種類の助けもいただければ幸いです:)
ここにいくつかのプロトタイプがあります:
virtual ITexture* getTexture(const io::path& filename) = 0;
typedef core::string<fschar_t> path; // under 'io' namespace
typedef char fschar_t;
typedef string<c8> stringc;
typedef char c8;
参考までに、私は MSVC++ 2008 EE を使用しています。
(コードが更新されました)