Il seguente codice compilato con gcc-4.5.1, ma non in Visual Studio 11.Visual Studio 11 errore di compilazione utilizzando std :: map
#include <map>
#include <array>
typedef std::pair<const unsigned int, std::array<const unsigned int, 4>> pairus;
int main(){
std::map<const unsigned int, std::array<const unsigned int, 4> > x;
std::array<const unsigned int, 4> troll = {1, 2, 3, 4};
x.insert(pairus(1, troll));
auto z = x[1];
}
1 è ora mappato std::array<> troll
. L'inserimento funziona bene e il programma viene compilato. Ma, non appena provo auto z = x[1]
-> quindi cercando di ottenere la matrice troll che 1
viene mappata, il programma non compila con il seguente errore:
error C2512: 'std::array<_Ty,_Size>::array'
: senza adeguata costruttore di default disponibili
Quali sono le cause questa differenza di comportamento tra gcc e vs11 e come risolverlo?
Grazie.
Sei sicuro che 'pairus' non dovrebbe essere' make_pair'? (Non pensare che questo sia il tuo problema) – Corbin
Sì, funziona bene con pairus di tipo std :: pair <>. Questo strano comportamento del compilatore mi sta facendo impazzire. – ScarletAmaranth
Che aspetto ha pairus (assumendo che si tratti di una funzione personalizzata? O è l'alias di MSVC++ di make_pair?). Sospetto che il problema potrebbe risiedere in pairus perché non c'è bisogno di un costruttore predefinito in nessun punto del codice che hai postato. (Anche se sarebbe stato necessario un ctor predefinito se facessi x [k] dove k non è nella mappa.) – Corbin