gpt4 book ai didi

c++ - 用静态成员名覆盖全局变量名

转载 作者:行者123 更新时间:2023-11-30 03:03:04 27 4
gpt4 key购买 nike

如果在 Visual Studio 的 c++ 文件中包含 windows.h,则它们将定义一个名为 STANDARD_RIGHTS_ALL 的全局标识符。我想将该名称用作我正在创建的类中的静态成员变量的名称。我尝试按如下方式进行...

class ACLAmigo
{
public:
static int STANDARD_RIGHTS_ALL;
ACLAmigo(void);
~ACLAmigo(void);
};

稍后在另一个文件中我有这个...

int ACLAmigo::STANDARD_RIGHTS_ALL = 1;

但是 IDE 如此提示:“错误:需要一个标识符”。

问题:我可以使用这个已经声明的标识符 STANDARD_RIGHTS_ALL 作为成员变量名吗?如果可以,如何使用?

最佳答案

问题是 STANDARD_RIGHTS_ALL(以及大多数其他内容)是。宏总是“全局定义的”。此外,它们在编译器开始分析您的代码之前由预处理器解析,以便您的代码变成:

static int 0x001F0000 /*STANDARD_RIGHTS_ALL*/;

这是胡说八道。

要么选择另一个变量名,要么取消定义该宏:

#undef STANDARD_RIGHTS_ALL
static int STANDARD_RIGHTS_ALL; // now it's ok

关于c++ - 用静态成员名覆盖全局变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9655871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com