使用对象中的结构

Use a struct from a object?

本文关键字:结构 对象      更新时间:2023-10-16

我从工作代码(显然不是我写的)开始,我看到他们制作了一个对我来说有意义的类对象数据闪存,但之后他们使用了:

 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;
}

代码定义了多个嵌套范围层,原始代码使用范围解析操作符:: 进行范围解析

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

作为脚注,由于枚举的作用域规则,枚举可以通过两种方式访问。

#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;
}