Ci-dessous est la classe utilisée comme la valeur d'une carte:Pourquoi une classe utilisée comme valeur dans une carte STL a-t-elle besoin d'un constructeur par défaut dans ...?
map< int, Book > mapBooks;
for(int i = 0; i < 10; ++i)
{
Book b(i);
mapBooks[ i ] = b;
}
La déclaration provoque l'erreur est::
mapBooks[ i ] = b;
Si j'ajoute
class Book
{
int m_nId;
public:
// Book() { } <----- Why is this required?
Book(int id): m_nId(id) { }
};
principal() A l'intérieur un constructeur par défaut, l'erreur n'apparaît pas. Cependant, je ne comprends pas pourquoi le besoin. Quelqu'un peut-il expliquer? Si j'utilise insert()
, le problème n'apparaît pas. Par ailleurs, j'utilise Visual C++ 2008 pour compiler.
Pour être précis, 'operator []' n'attribue pas, mais renvoie une référence à la valeur nouvellement créée. L'affectation est un code utilisateur. –
@dribeas: Oui, c'est vrai. Je vais mettre à jour pour les pédants! –