Problem mit STL Algorithmus Funktion aus der Standardbibliothek
-
Hallo,
Ich bin ein blutiger Anfänger und beschäftige mich gerade mit dem Buch "Jetzt lerne ich C++" aus der Markt und Technik Reihe.
Jedenfalls sollte ich folgenden Code zu dem Thema STL Algorithmen und Container abtippen und zum Laufen bringen.#include <functional> #include <algorithm> #include <conio.h> #include <deque> using namespace std; //Generator fuer ungerade Zufallszahlen int get_ungerade() { int zufallszahl; zufallszahl = rand() % 10000; if(! (zufallszahl & 1L)) return zufallszahl + 1; else return zufallszahl; } //Iterator definieren typedef deque<int>::iterator iter; int main() { deque<int> container(5); //Werte initialisieren generate(container.begin(), container.end(), get_ungerade()); //Werte hinzufügen container.insert(container.end(), 6, get_ungerade()); //Werte sortieren stable_sort(container.begin(), container.end(), less<int>()); //Werte ausgeben int count = 1; for(iter i = container.begin(); i != container.end(); i++) { cout << count++ << ": " << *i << endl; } getch(); return 0; }Das Programm erstellt einen Container und füllt diesen mit 5 Zufallszahlen.
Zusätzlich werden weitere 6 Zufallszahlen hinzugefügt (zur Veranschaulichung der Funktion container.insert()).
Am Ende wird der Container mithilfe eines Iterators durchlaufen und die Werte werden ausgegeben.Beim Kompilieren tritt jedoch folgender Fehler auf.
error C2064: Ausdruck ergibt keine Funktion, die 0 Argumente übernimmtmit Verweis auf die Funktion generate() aus der Standardbibliothek, die ich im Programm verwende.
Ich konnte bisher keine Lösung für das Problem finden.
-
generate erwartet dort irgendetwas, dass man aufrufen kann, einenZiger auf eine Funktion oder ein Objekt mit () OPerator zum Beispiel. Du übergibst aber ein int, nämlich das Ergenis eines get_ungerade() Aufrufs. Richtig wäre ein Ziger auf die Funktion:
generate(container.begin(), container.end(), &get_ungerade); // oder einfach generate(container.begin(), container.end(), get_ungerade);
-
Und ich glaube nicht, dass
container.insert(container.end(), 6, get_ungerade());das macht, was du denkst. Das ruft get_ungerade() nämlich einmal auf und fügt dann 6x ein. Der Unterschied zwischen generate und insert sollte mit der Erklärung von brotbernd klar sein.
-
ah ok...
habs grad ausprobiert und es funktioniert.Naja, so wie du es beschrieben hast stand es eigentlich auch im Buch.
Ich hab es aber für einen Fehler gehalten und get_ungerade() geschrieben anstelle von get_ungerade, da mir diese Schreibweise von Funktionen gänzlich unbekannt war. Dazu wurde im Buch auch gar nichts geschrieben.
Die haben es einfach ins Programm gehauen ohne dass es vorher beschrieben wurde
naja , jedenfalls Vielen Dank man
