2010-12-03 29 views
6

que tienen una clase de C++ con dos variables miembro¿Inicializar el mapa y establecer las variables miembro de la clase para vaciar en C++?

std::map<int, Node*> a; 

y

std::set<Node*> b; 

Un corrector de estilo utilizado en mi Universidad requiere que todas las variables miembro que ser inicializado en el constructor de la clase. ¿Cómo se pueden inicializar estas variables miembro a y b para vaciarlas en el constructor de la clase en la que se encuentran?

+0

Ha comentado dos respuestas con "esto funciona, gracias". Ahora debería aceptar una (en caso de respuestas idénticas, generalmente la primera). ;) – Mephane

Respuesta

11

De esta manera:

class A 
{ 
    public : 

    A() : s(), 
     m() 
    { 
    } 


    std::set<int> s; 
    std::map< int, double > m; 
}; 
+0

Esto funciona, ¡gracias! –

2

Me gusta SomeClass::SomeClass() : a(), b() {}?

+0

Esto funciona, ¡gracias! –

2

Como tanto std::set y std::map tienen "usuario" constructores por defecto -declarado que se inicializará implícitamente sin embargo que la construcción de su clase. No tiene que hacer nada especial para cumplir con la guía de "estilo".

+0

Gracias Charles. El problema aquí fue que la verificación de estilo se realiza automáticamente como parte de un sistema de calificación automático y requiere que todas las variables miembro se inicialicen explícitamente. –

+0

@Marek Miettinen: ¿Estás seguro de que la verificación de estilo no solo se aplica a los tipos POD? Nunca he visto una guía de estilo insistir en inicializar explícitamente cosas que tienen constructores predeterminados que se utilizarían para la inicialización implícita en cualquier caso. –

+0

Y si el verificador de estilos realmente lo requiere, está roto, así de simple. – etarion

0

Esta comprobación la realiza el compilador g ++, cuando se aplica la opción de advertencia -WeffC++. Consulte el Ítem 4 ("Asegúrese de que los objetos se inicialicen antes de que se usen" en Scott Meyers, Effective C++, Libro para más información, por qué podría ser razonable inicializar todos los miembros usando la lista de inicialización de miembros. Básicamente sugiere hacer esto de manera consistente y prefiere esto sobre las asignaciones dentro de cuerpos constructores

+0

¿Cómo explica esto cómo hacerlo? La referencia efectiva de C++ es un buen material de investigación, pero no es una respuesta completa. – ssube

+0

@peachykeen: Tiene razón, esto es más bien un comentario, que una respuesta a la pregunta inicial. –

Cuestiones relacionadas