首页 > 解决方案 > 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存在和它的价值?

标签: c++qtnamespacesglobal-variablesc++17

解决方案


我创建了一个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


推荐阅读