您好,我在一个项目期间遇到了这个问题,我有这样的事情:

类型.h

namespace Machine
{
    enum class size{
        TINY,
        SMALL,
        MEDIUM
    }
    //other stuff.....


并在另一个文件中:

test.h:

#include "types.h"
class sample{
    public:
        void some_function();
        Machine::size s; //this declaration is correct
}


test.cpp:

#include "test.h"
void some_function(){
    s = Machine::size::TINY;//line aaaa; this line is error
}


在aaaa行,我不断收到错误消息:


  错误:“ Machine :: size”不是类或名称空间


有人知道为什么吗?还是将枚举类放在名称空间中不好?
谢谢!


  编辑:我修复了第一个文件中的机器拼写问题,对不起
  那


Machine :: size s只是保存此属性(机器的大小)的地方,因此我并不认为这很特别。

最佳答案

在test.cpp中,替换定义以

void some_function()


通过

void sample::some_function()


否则,您将定义一个独立的函数,而该函数与类sample没有任何关系(换句话说,您不是在定义成员函数)。因此,在您的情况下,s不被视为类sample的成员变量,因此会出现错误。

关于c++ - (C++)无法引用 namespace 内的枚举类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34913181/

10-12 00:20