2017-01-05 4 views
0

Ich bekomme einen Kompilierungsfehler in den Zeilen unten, die ich nicht vollständig verstehe. nach msdn ist die Syntax korrekt.C++ - Kompilierungsfehler in diskret_verteilung

vector<int> temp_weights = //some data will be here 

discrete_distribution<int> weights ({ temp_weights.begin(), temp_weights.end() }); //error C2440 

der vollständige Fehler ist:

Error 5 error C2440: 'initializing' : cannot convert from 'initializer-list' to 'std::discrete_distribution<int>' 
+0

Sie bitte Ihre vollständige Compilerversion beachten. – tambre

+0

@tambre: es ist Visual Studio C++ 2013 Update 5 – oleole

Antwort

3

discrete_distribution<int> weights { temp_weights.begin(), temp_weights.end() };

Der Grund, warum dies nicht der Fall funktioniert, weil es die Syntax für eine Initialisierungsliste ist, der Compiler denkt, dass Sie temp_weights.begin() speichern möchten bei weights[0] und temp_weights.end() bei weights[1].

Es sollte ein Konstruktor sein, die zwei vector::iterator ‚s akzeptiert (um die Vektoren Elemente über kopieren), und so sollte diese Arbeit für Sie

discrete_distribution<int> weights (temp_weights.begin(), temp_weights.end());

+0

thx, aber es scheint, dass es keine solche Konstruktor ich in meiner Version von seitdem den Fehler: 'Fehler Fehler C2661:‚std :: discrete_distribution : : discrete_distribution ': keine überladene Funktion benötigt 2 Argumente' – oleole

+0

Leider ist dieser Fehler wahrscheinlich auf einen Fehler in Ihrer Version von vs2013 zurückzuführen [Quelle] (http://stackoverflow.com/questions/31175655/defining-a-discrete-probability-distribution -in-c) – George

+0

Oh mein Gott, danke für das Hinzeigen. Ich werde versuchen, zu aktualisieren. – oleole