sizeof成员计算错误

D_E*_*D_E 12 c++

我有这样的结构(由于某种原因我不能使用数组):

  struct OperatorData 
  {
    char m_record_0[RIX_OPERATOR_CONFIG_SIZE];
    char m_record_1[RIX_OPERATOR_CONFIG_SIZE];
    //....
    char m_record_9[RIX_OPERATOR_CONFIG_SIZE];
  };
Run Code Online (Sandbox Code Playgroud)

我试图在编译时计算字段数量:

enum {fieldsAmount = sizeof(OperatorData) / sizeof(OperatorData::m_record_0)};
Run Code Online (Sandbox Code Playgroud)

编译器会报告这样的消息:

Error:  #245: a nonstatic member reference must be relative to a specific object
  enum{fieldsAmount = sizeof(OperatorData) / sizeof(OperatorData::m_record_0)};
                                                                  ^
Run Code Online (Sandbox Code Playgroud)

我使用keil uVision3 V3.60.在结构内部或外部放置枚举声明并不重要.为什么编译器不能占用这个元素的大小?

CB *_*ley 12

看起来您的编译器不支持允许Type::member在未评估的表达式中使用的C++ 11 .你必须制作一个正确类型的表达式,例如:

OperatorData* noImpl();

enum{fieldsAmount = sizeof(OperatorData) / sizeof(noImpl()->m_record_0)};
Run Code Online (Sandbox Code Playgroud)


Căt*_*tiș 5

使用typedef:

typedef char RecordType[RIX_OPERATOR_CONFIG_SIZE];

struct OperatorData 
{
   RecordType m_record_0;
   RecordType m_record_1;
   //....
   RecordType m_record_9;
};
Run Code Online (Sandbox Code Playgroud)

然后:

enum {fieldsAmount = sizeof(OperatorData) / sizeof(RecordType)};
Run Code Online (Sandbox Code Playgroud)