应用于不完整类型变量的成员访问表达式

Member access expression applying to a variable of an incomplete type

考虑以下代码:

#include <iostream>

struct A
{
    static const int b = 42;
    static const A *a;
    int ca[b]; //OK
    int c[a -> b]; //1, ill-formed
};

int main(){ }

DEMO

//1,class类型仍然被认为是不完整的对象类型(相关部分N4296::9.2/2 [class.mem])。但是我们不能对它应用 class-member-access 表达式。为什么?

你不能解释为什么程序格式错误吗?

因为成员访问运算符只能应用于一个完整的类型,正如C++11 5.2.5所规定的[expr.ref]/2:

For the first option (dot) the first expression shall have complete class type. For the second option (arrow) the first expression shall have pointer to complete class type.

如果您问为什么存在该规则:因为,除非 class 完整,即成员已声明,否则无法说明如何解释成员名称。