Di seguito è la classe utilizzata come valore in una mappa:Perché una classe usata come valore in una mappa STL ha bisogno di un costruttore predefinito in ...?
class Book
{
int m_nId;
public:
// Book() { } <----- Why is this required?
Book(int id): m_nId(id) { }
};
All'interno main():
map< int, Book > mapBooks;
for(int i = 0; i < 10; ++i)
{
Book b(i);
mapBooks[ i ] = b;
}
L'affermazione che causa l'errore è:
mapBooks[ i ] = b;
Se aggiungo un costruttore predefinito, l'errore non appare. Tuttavia, non capisco perché il bisogno. Qualcuno può spiegare? Se utilizzo insert()
, il problema non viene visualizzato.
A proposito, sto usando Visual C++ 2008 per compilare.
Per essere precisi, 'operator []' non assegna, ma restituisce un riferimento al valore appena creato. Il compito è il codice utente. –
@dribeas: Sì, è vero. Aggiornerò per i pedanti! –