gpt4 book ai didi

c++ - 在 Visual C++ 中称为 RGB 的类

转载 作者:太空狗 更新时间:2023-10-29 20:39:45 24 4
gpt4 key购买 nike

我正在从事一个跨平台的开源项目。到目前为止,在命名空间 rgb 中有一个名为 RGB 的类并不是问题。现在我发现 Microsoft 编译器 (VS 2010) 出现了一个奇怪的问题。

当我声明类时,预处理器提示宏被滥用。我知道在 WinGdi.h 中定义了一个粗略的 RGB 宏。谁发现那是合理的,但无论如何。所以在 rgb.h 的顶部我做了:

#undef RGB

namespace rgb {

class RGB : public shell::Command {
public:
RGB();
};
}

这解决了编译 rgb.cpp 对象的问题。但是,在另一个地方我想实例化一个对象:

#include "rgb.h"

namespace shell {

Modules::Modules() {
Command *c;
c = new rgb::RGB(); // errors at this line
}
}

我收到错误消息:错误 19 error C2589: '(' : '::' 右侧的非法标记错误 20 错误 C2059:语法错误:'::'在指定行

我该如何解决这个问题?

最佳答案

取消定义系统宏是一种可怕的做法,我强烈建议不要这样做。也就是说,我只是更改类的 RGB 名称,以免与系统宏冲突。

包含守卫和包含层次结构可能会导致undef'ining things 的问题。

如果你真的想保持与宏名称相同的名称,只需指示预处理器扩展你的类函数调用和构造函数:

#define RGB(r,g,b)  whatever..

namespace rgb {
class RGB {
public:
(RGB)() {} // "Dear preprocessor, please don't expand this"
};
}

void hello() {
auto c = new (rgb::RGB)(); // Ditto
}

关于c++ - 在 Visual C++ 中称为 RGB 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26719529/

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