C ++-尝试在类中使用全局时为“不是类或名称空间”

时间:2018-08-17 15:42:11

标签: c++ qt namespaces global-variables c++17

在我的主要功能之前,我有一个名称空间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存在并且具有什么值?

1 个答案:

答案 0 :(得分:-1)

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