首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++初始化为函数

C++初始化为函数
EN

Stack Overflow用户
提问于 2017-02-17 19:58:56
回答 2查看 4.8K关注 0票数 0

我正在通过一些旧的C++代码吐痰。在其中,我声明一个局部变量如下:

代码语言:javascript
复制
Pen blackPen(Color(255, 0, 0, 0));

这似乎调用了构造函数。

我试图使它成为一个全局变量,我想在一个函数中初始化它。但是,我无法以这种方式将变量与它的初始化分开。当然,我可以定义一个全局变量。

代码语言:javascript
复制
Pen blackPen;

但现在我不知道如何初始化它:

代码语言:javascript
复制
blackPen = Pen(Color(255, 0, 0, 0));

似乎是最合理的,但我有个错误:

“G对接::Pen(const::Pen &)”(声明在"c:\Program (x86)\Windows \8.1\Include\um\gdiuspen.h“第452行)

下面的代码片段显示了此行为:

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-17 20:07:12

我试图使它成为一个全局变量,我想在一个函数中初始化它。但是,我无法以这种方式将变量与它的初始化分开。

一种选择是通过函数提供对变量的访问。

代码语言:javascript
复制
Pen& getBlackPen()
{
   static Pen pen{Color{255, 0, 0, 0}};
   return pen;
}

然后,在函数声明可用的任何地方,您都可以访问对象。当第一次调用该函数时,它将被初始化。

更新,回应OP的评论

另一种选择(前提是Pen满足成为std::map的值类型的要求):

代码语言:javascript
复制
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];
}

现在,您可以使用:

代码语言:javascript
复制
Pen& pen1 = getPen("black");
Pen& pen2 = getPen("red");
票数 4
EN

Stack Overflow用户

发布于 2017-02-17 21:23:32

我的解决方案是直接定义指针而不是笔,然后使用画笔工作的构造函数:

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42306380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档