c++ - promedio - ¿Puedes usar el tamaño de un miembro al declarar otro miembro?
tamaño promedio del miembro masculino a los 22 años (2)
Esto fue ilegal en C ++ 03 porque estos miembros son miembros de datos no estáticos.
A partir de C ++ 11, esto es legal ya que en un operando no evaluado puede usar miembros de datos no estáticos sin tener un objeto correspondiente.
¿Es esto legal C ++?
struct foo
{
int a[100];
int b[sizeof(a) / sizeof(a[0])];
};
GCC 4.6 lo acepta, pero MSVC 2012 no lo acepta. Parece que debería estar bien para mí, pero un poco de Google no ayudó y no sé dónde buscar en el estándar.
MSVC 2012 da el siguiente resultado:
error C2327: ''foo::a'' : is not a type name, static, or enumerator
error C2065: ''a'' : undeclared identifier
error C2070: ''''unknown-type'''': illegal sizeof operand
warning C4200: nonstandard extension used : zero-sized array in struct/union
Intente esto: esta es una solución para MSVC 2010 y MSVC 2012
struct Aoo
{
typedef int ArrayType;
ArrayType a[100];
};
struct foo : public Aoo
{
enum {bSize = sizeof(Aoo) / sizeof(Aoo::ArrayType)};
int b[bSize];
};