我有这样的结构(由于某种原因我不能使用数组):
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)
使用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)