Ho problemi a capire un errore. Sto lavorando con una mappa lineare di vettori (digitato da fili e memorizzare vettori di stringhe):Perché le parentesi fanno la differenza quando si inizializza un vettore vuoto?
typedef std::map<std::string, std::vector<std::string> > TRouteMarkets;
Il codice seguente (ridotta),
void CFoo::Bar(const char* route, const char* market)
{
// ...
TRouteMarkets::key_type key(route);
TRouteMarkets::mapped_type mapped();
TRouteMarkets::value_type pair(key, mapped);
// ...
}
produce il seguente errore:
"Foo.cc", line 518: Error: Could not find a match for std::pair<const std::string, std::vector<std::string>>::pair(const std::string, std::vector<std::string>()) needed in CFoo::Bar(const char*, const char*).
Ma rimuovere il ()
da mappata, cioè
TRouteMarkets::mapped_type mapped;
corregge l'errore. Perché? mapped
non è un vettore vuoto di stringhe in entrambi i casi?
Leggi [l'analisi più irritante] (http://en.wikipedia.org/wiki/Most_vexing_parse). –
Abbiamo davvero bisogno di un correttore automatico per il parsing e la famiglia irritante. Ho avuto una buona idea dal titolo della domanda che cosa sarebbe, viene fuori così spesso (c: –
Questo non è il parsing più irritante – hmjd