0

我想在全球范围内声明一个 TBitmap。

我尝试如下:

在方法中本地,这工作正常

std::auto_ptr<Graphics::TBitmap> RenderGraphic(new Graphics::TBitmap());

或者

Graphics::TBitmap * RenderGraphic = new Graphics::TBitmap;

所以要全局声明它,我在头文件中尝试了这个

Graphics::TBitmap *RenderGraphic;

这在构造函数中

__fastcall TShipGraphic::TShipGraphic(TComponent* Owner)
: TForm(Owner)

{

  Graphics::TBitmap * RenderGraphic = new Graphics::TBitmap;

}

它编译得很好,但是在运行时,在第一次出现时抛出访问冲突异常

      RenderGraphic->Canvas->Pen->Color = clBlack;

请提前告知,tks。

我使用的参考源是C++ Builder Graphics Introduction

建议在构造函数中声明

4

1 回答 1

0

你需要实现一个单例。考虑只读情况(位图创建一次,没有 setter 函数)。

在 MyGraphics.h 中定义访问器函数

#include <vcl.h>
TBitmap* GetRenderGraphic();

MyGraphics.cpp 中的实现

static std::unique_ptr<TBitmap> renderGraphic(new TBitmap());

TBitmap* GetRenderGraphic()
{
    return renderGraphic.get();
}

使用它(需要包括 MyGraphics.h)

GetRenderGraphic()->Canvas->Pen->Color = clBlack;
于 2018-11-12T13:09:45.250 回答