C 初始化为函数
C++ initialization as function
我正在通过一些旧的C 代码吐痰。在其中,我声明了这样的本地变量:
Pen blackPen(Color(255, 0, 0, 0));
这似乎称为构造函数。
我试图使其成为全局变量,我想在函数中初始化它。但是,我无法以这种方式将变量从其初始化中拆分。当然,我可以定义一个全局变量
Pen blackPen;
但是现在我不知道如何初始化它:
blackPen = Pen(Color(255, 0, 0, 0));
似乎是最合理的,但我有一个错误:
" gdiplus :: pen :: pen(const gdiplus :: pen&)"(在" c: program文件(x86) Windows kits 8.1 include um um um um gdipluspen.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;
}
我试图使其成为全局变量,我想在函数中初始化它。但是,我无法以这种方式将变量从其初始化中分开。
一种选项是通过函数提供对变量的访问。
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");
我的解决方案是定义指针而不是直接的笔,然后使用从刷子工作的构造函数:
#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;
}
相关文章:
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- 我们是否需要为 C++ 中的多个函数初始化多个模板?
- 在C++中使用默认构造函数初始化对象的不同方法
- 使用默认构造函数初始化对象的不同方法
- 我们可以用参数化构造函数初始化结构的数组吗?
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 类内初始化与构造函数初始化列表的顺序
- 通过 C++ 中的重载构造函数初始化未知类型的变量
- 使用复制构造函数初始化 new[]
- 如何从子类的构造函数初始化父类的私有成员
- 在构造函数初始化列表中使用 std::variant
- 使用构造函数初始化结构还是在之后设置其值更好?
- C++ 没有匹配的构造函数初始化 []
- 我正在使用dev c ++,但收到错误(C++98'array'必须由构造函数初始化)
- 如何从静态类函数初始化静态类对象
- 使用所述填充构造函数初始化向量中的向量
- 如何同时创建一个具有两个或多个构造函数初始化的对象
- 使用 c++ 中的函数初始化数组
- 使用 lambda 函数初始化静态数据成员