使用对象的结构?

时间:2014-04-19 21:36:27

标签: c++

我开始使用代码(显然不是我写的),我看到他们创建了一个对我来说有意义的类对象dataflash,但之后他们使用了:

 DataFlash::ID id;

这显然是因为他们需要该结构的对象,但是他们回到DataFlash类的事实让我感到烦恼,不知道为什么,但我想"不,不,你应该使用我们的对象刚刚制作"并迅速将其更改为我在下面的内容,这会产生以下错误:

error: invalid use of ‘struct main()::DataFlash::ID’

嗯,这不公平,我基本上对我的眼睛做同样的事情,为什么这个无效使用?一旦它们在一个对象中,结构体(以及我假设的嵌套类)也没用吗?

#include <iostream>
using namespace std;

int main()
{
    class DataFlash
    {
    public:
        struct ID
        {
            uint8_t manufacturer;       /**< Manufacturer id **/
            uint8_t device[2];          /**< Device id **/
            uint8_t extendedInfoLength; /**< Extended device information**/
        };
    };

    DataFlash dataflash;
    dataflash.ID id;
    return 0;
}

1 个答案:

答案 0 :(得分:1)

代码定义了几层嵌套作用域,原始代码使用作用域解析运算符::进行作用域解析

您的示例使用成员访问运算符.,并且结构ID不是成员,它存在于您的类型范围内,类型和值不是一回事。

作为脚注,由于enum的范围规则,可以通过两种方式访问​​枚举。

#include <iostream>

struct object {
   enum identifier {
      a = 2,
      b = 16,
   };

   identifier id;
};

int main(int argc, char* argv[]) {
   object obj;

   std::cout << object::a << std::endl;
   std::cout << obj.b << std::endl;
}