我正在通过一些旧的C++代码吐痰。在其中,我声明一个局部变量如下:
Pen blackPen(Color(255, 0, 0, 0));这似乎调用了构造函数。
我试图使它成为一个全局变量,我想在一个函数中初始化它。但是,我无法以这种方式将变量与它的初始化分开。当然,我可以定义一个全局变量。
Pen blackPen;但现在我不知道如何初始化它:
blackPen = Pen(Color(255, 0, 0, 0));似乎是最合理的,但我有个错误:
“G对接::Pen(const::Pen &)”(声明在"c:\Program (x86)\Windows \8.1\Include\um\gdiuspen.h“第452行)
下面的代码片段显示了此行为:
#include <windows.h>
#include <gdiplus.h>
using namespace Gdiplus;
Pen redPen;
int main(int argc, char *argv[])
{
Pen greenPen(Color(255, 0, 0, 0)); // this initialization works
redPen = Pen(Color(255, 0, 0, 0)); // but this doesn't...
return 0;
}发布于 2017-02-17 20:07:12
我试图使它成为一个全局变量,我想在一个函数中初始化它。但是,我无法以这种方式将变量与它的初始化分开。
一种选择是通过函数提供对变量的访问。
Pen& getBlackPen()
{
static Pen pen{Color{255, 0, 0, 0}};
return pen;
}然后,在函数声明可用的任何地方,您都可以访问对象。当第一次调用该函数时,它将被初始化。
更新,回应OP的评论
另一种选择(前提是Pen满足成为std::map的值类型的要求):
Pen& getPen(std::string const& name)
{
static std::map<std::string, Pen> pens =
{
{"black", Pen{Color{255, 0, 0, 0}} },
{"white", Pen{Color{...}} },
{"red", Pen{Color{...}} },
// etc.
};
}
return pens[name];
}现在,您可以使用:
Pen& pen1 = getPen("black");
Pen& pen2 = getPen("red");发布于 2017-02-17 21:23:32
我的解决方案是直接定义指针而不是笔,然后使用画笔工作的构造函数:
#include <Windows.h>
#include <gdiplus.h>
using namespace Gdiplus;
Brush *blackBrush;
Pen *blackPen;
int main(int argc, char *argv[])
{
blackBrush = new SolidBrush(Color(0, 0, 0));
blackPen = new Pen(blackBrush);
return 0;
}https://stackoverflow.com/questions/42306380
复制相似问题