A continuación se muestra la clase utilizada como el valor en un mapa:¿Por qué una clase utilizada como valor en un mapa STL necesita un constructor predeterminado en ...?
class Book
{
int m_nId;
public:
// Book() { } <----- Why is this required?
Book(int id): m_nId(id) { }
};
dentro de main():
map< int, Book > mapBooks;
for(int i = 0; i < 10; ++i)
{
Book b(i);
mapBooks[ i ] = b;
}
La declaración que causa el error es:
mapBooks[ i ] = b;
Si añado un constructor predeterminado, el error no aparece. Sin embargo, no entiendo por qué es necesario. ¿Alguien puede explicar? Si uso insert()
, el problema no aparece.
Por cierto, estoy usando Visual C++ 2008 para compilar.
Para ser precisos, 'operator []' no asigna, pero devuelve una referencia al valor recién creado. La asignación es código de usuario. –
@dribeas: Sí, cierto. ¡Actualizaré para los pedantes! –