Poniżej jest klasa używana jako wartość w mapie:Dlaczego klasa używana jako wartość w mapie STL potrzebuje domyślnego konstruktora w ...?
class Book
{
int m_nId;
public:
// Book() { } <----- Why is this required?
Book(int id): m_nId(id) { }
};
Wewnątrz main():
map< int, Book > mapBooks;
for(int i = 0; i < 10; ++i)
{
Book b(i);
mapBooks[ i ] = b;
}
Oświadczenie przyczyną błędu jest:
mapBooks[ i ] = b;
Jeśli dodać domyślny konstruktor, błąd nie pojawia się. Jednak nie rozumiem, dlaczego potrzeba. Czy ktoś może wyjaśnić? Jeśli użyję insert()
, problem nie pojawi się.
Nawiasem mówiąc, używam Visual C++ 2008 do kompilacji.
Mówiąc dokładniej, 'operator []' nie przypisuje, ale zwraca odniesienie do nowo utworzonej wartości. Przypisanie to kod użytkownika. –
@dribeas: Tak, prawda. Zaktualizuję dla pedantów! –