En-miembro de la clase de inicialización con una lista de inicializador de uso uniforme de sintaxis de inicialización?[duplicar]

StackOverflow https://stackoverflow.com//questions/24035388

Pregunta

Estoy tratando de compilar el siguiente con MSVC2013:

class SomeClass
{
    struct SomeStruct { bool a,b,c; };
    SomeStruct ss{false, false, false};
}

El compilador me da el siguiente error: SomeClass::SomeStruct::SomeStruct: no overloaded function takes 3 arguments.

Si puedo cambiar el código a este:

class SomeClass
{
    struct SomeStruct { bool a,b,c; };
    SomeStruct ss{{false, false, false}};
}

el programa se compila y se ejecuta correctamente.Se trata de un problema con el compilador, o yo no entiendo la sintaxis?Por lo que he estado leyendo, la primera versión de compilación.

¿Fue útil?

Solución

Aquí es el responsable de la gramática de N3797:

// after a member declaration:
braced-or-equal-initializer-list:
  = initializer-clause
  braced-init-list

braced-init-list:
  { initializer-list ,OPT }
  { }

initializer-list:
  initializer-clause
  initializer-list, initializer-clause

initializer-clause:
  assignment-expression
  braced-init-list

Así que yo diría que la primera afirmación es correcta, y de hecho es aceptado por un reciente gcc y clang.

Otros consejos

Si para colocar los puntos y coma como se requiere

class SomeClass
{
    struct SomeStruct { bool a,b,c; };
    SomeStruct ss{false, false, false};
};

Entonces parece que es un error del compilador MS VC ++ 2013.Al menos el código se compila con éxito en www.ideone.com.

Structire Somestruct es un agregado y debe inicializarse usando una lista de inicializadores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top