2016-01-21 104 views
1

你好,我一个项目中遇到了这个问题里面,我有这样的事情:(C++)不能引用枚举类命名空间

types.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我一直得到错误信息:

error: 'Machine::size' is not a class or namespace

任何人有任何想法,为什么?或者将enum类放在命名空间内不好吗? 谢谢!

Edit: I fixed the machine spell problem in the first file, sorry about that

机::大小S只是为了保持这个属性(一台机器的大小)的地方,所以我真的不认为这是一些特别的东西。

+0

在您的第一台文件机器中是下划线。是否打算 – Eric

+1

请不要使用接受的答案解决您的问题。任何后来阅读这篇文章的人都会感到困惑。我回到了以前的修订版,以便问题和答案有意义。 – paddy

回答

0

TEST.CPP替换定义开始

void some_function() 

通过

void sample::some_function() 

否则你要定义一个独立的功能与类sample毫无关系(在其他单词,你没有定义一个成员函数)。所以在你的情况下,s不被看作是类sample的成员变量,因此是错误。

+0

谢谢!但是如果这部分也是正确的,这个错误不应该发生吗? – Wenyu

+0

@Wenyu不,它应该工作,它的工作原理(在我身边测试)。做一个最简单的例子,并确保正确编译它,包括'-std = C++ 11'编译器标志,如果你使用C++ 11和gcc/clang。 – vsoftco

+0

@Wenyu如果它现在有效,请恢复编辑,因为现在问题中的代码看起来完全正确,答案似乎解决了一个不存在的问题。 – vsoftco