c++ - C++ - 尝试在类中使用全局时“不是类或命名空间”
问题描述
在我的主要功能之前,我有一个Global
带有常量静态变量的命名空间:
#include "RaGaCCMainView.h"
#include <QApplication>
namespace Global {
const static bool isLittleEndian = [](){
union {
uint32_t i;
char c[4];
} bint = {0x01020304};
return bint.c[0] == 1;
}();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
RaGaCCMainView w;
w.setAttribute(Qt::WA_QuitOnClose);
w.show();
return a.exec();
}
现在在里面RaGaCCMainView.h
我想将变量声明为外部变量:
extern const static bool Global::isLittleEndian;
这是我得到相应错误的地方:
C2653: 'Global': is not a class or namespace name
我只想在里面使用全局变量RaGaCCMainView.cpp
:
void RaGaCCMainView::someFunction()
{
...
if(Global::isLittleEndian) {
...
}
}
这似乎是一个愚蠢的问题,但我唯一能回答的问题没有帮助或没有用。我(显然)想声明和定义Global::isLittleEndian
一次,并在这种情况下在我想要的任何类中使用它RaGaCCMainView
。
怎样才能RaGaCCMainView
知道它的Global::isLittleEndian
存在和它的价值?
解决方案
我创建了一个Endianness.h
定义预处理器宏的文件IS_LITTLE_ENDIAN
:
#ifndef ENDIANNESS_H
#define ENDIANNESS_H
#include <QtGlobal>
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
#define IS_LITTLE_ENDIAN 1
#else
#define IS_LITTLE_ENDIAN 0
#endif
#endif // ENDIANNESS_H
我在课堂上包括这个RaGaCCMainView
并使用宏IS_LITTLE_ENDIAN
。
推荐阅读
- javascript - 在页面加载时将 aria-expanded="true" 更改为 false
- java - 保存下载的图像并在谷歌地图中使用它作为标记 android studio
- javascript - 如何在 Three.js 中访问使用 GLTFLoader 加载的网格的单个顶点
- git - Heroku git:clone 引起了问题
- swift - Swift 4 Int32 到 [UInt8]
- php - Prestashop:标志有问题,我在前端看不到
- php - 使用 Ajax 和 jquery 以及 html 选择按钮显示特定数据
- java - java双精度似乎不一致
- python - 两列火车和一只鸟
- php - Twig - 沙盒安全策略不起作用