Der folgende Code mit gcc-4.5.1 kompiliert, aber nicht in Visual Studio 11.Visual Studio 11 Fehler bei der Kompilierung mit 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 wird nun auf std::array<> troll
abgebildet. Die Einfügung funktioniert gut und das Programm kompiliert. Aber sobald ich versuche auto z = x[1]
-> Daher versucht das Array zu bekommen Troll, dass 1
zugeordnet wird, wird das Programm nicht mit dem folgenden Fehler kompilieren:
error C2512: 'std::array<_Ty,_Size>::array'
: kein geeigneter Standardkonstruktor verfügbar
Was sind die Ursachen dieser Unterschied im Verhalten zwischen gcc und vs11 und wie man es repariert?
Danke.
Sind Sie sicher, dass 'pairus' nicht' make_pair' sein sollte? (Denken Sie nicht, dass das Ihr Problem ist) – Corbin
Ja, es funktioniert gut, wenn Pairus vom Typ std :: pair <> ist. Dieses seltsame Verhalten des Compilers macht mich verrückt. – ScarletAmaranth
Wie sieht das Paar aus (angenommen, es handelt sich um eine benutzerdefinierte Funktion oder ist es der MSVC++ Alias von make_pair?). Ich vermute, dass das Problem in Pairus liegen kann, da kein Standardkonstruktor irgendwo in dem von Ihnen geposteten Code benötigt wird. (Obwohl ein Standard-Ctor benötigt würde, wenn du x [k] benutzt hättest, wobei k nicht in der Karte ist.) – Corbin