vector durchlaufen
-
irgendwie kommst du mit deinen Indizes durcheinander. Gibt bitte mal ein konkretes Beispiel, also bei welcher Eingabe und welchen Datensatz was genau ausgegeben werden soll.
Es gilt:
index 0:
lo: 167027 548 0 0 0 0 0 0 167027 548 0 0 0 0 0 0index 1:
wlan0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0index 2:
eth0: 39072289 41342 0 0 0 0 0 3348 4363113 28697 0 0 0 0 0 0
-
daddy_felix schrieb:
irgendwie kommst du mit deinen Indizes durcheinander. Gibt bitte mal ein konkretes Beispiel, also bei welcher Eingabe und welchen Datensatz was genau ausgegeben werden soll.
Es gilt:
index 0:
lo: 167027 548 0 0 0 0 0 0 167027 548 0 0 0 0 0 0index 1:
wlan0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0index 2:
eth0: 39072289 41342 0 0 0 0 0 3348 4363113 28697 0 0 0 0 0 0Bei meinem Code kommt für i = 1:
wlan0:Bytes: 0 Packets: 0 Errs: 0 Drop: 0 Fifo: 0 Frame: 0 Compressed: 0 Multicast: 0 Bytes: 0 Packets: 0 Errs: 0 Drop: 0 Fifo: 0 Coll: 0 Carrier: 0 Compressed: 0 eth0:Bytes: 51174195 Packets: 72809 Errs: 0 Drop: 0 Fifo: 0 Frame: 0 Compressed: 0 Multicast: 9927 Bytes: 7798016 Packets: 48352 Errs: 0 Drop: 0 Fifo: 0 Coll: 0 Carrier: 0 Compressed: 0Es soll aber nur:
wlan0:Bytes: 0 Packets: 0 Errs: 0 Drop: 0 Fifo: 0 Frame: 0 Compressed: 0 Multicast: 0 Bytes: 0 Packets: 0 Errs: 0 Drop: 0 Fifo: 0 Coll: 0 Carrier: 0 Compressed: 0Das heißt ich muss dem noch irgendwie sagen das dann stop ist.
-
Enno schrieb:
Jain ich will eine Funktion die da durchlaufen kann und den entsprechenden index den ich eingebe dann auch ausgibt. Versteht man das?
Nein. Das ist auch nicht, was du erreichen willst, sondern ein Weg, mit dem du glaubst, es zu erreichen - was offensichtlich nicht der Fall ist, sonst gäbs diesen Thread nicht.
Wie daddy_felix schon sagt: gib uns ein konkretes Beispiel. Keinen Code, keine Ideen, wie du es umsetzen könntest, sondern beschreibe nur Input und Output.
Siehe auch erster Link in meiner Signatur.
-
Enno schrieb:
Das heißt ich muss dem noch irgendwie sagen das dann stop ist.
Dann brauchst du kleine Schleife. Ich habe dir doch schon den Code dafür geliefert...
void PrintElement(size_t index) { assert(index < dev.size()); cout << dev[index]; }
-
daddy_felix schrieb:
Enno schrieb:
Das heißt ich muss dem noch irgendwie sagen das dann stop ist.
Dann brauchst du kleine Schleife. Ich habe dir doch schon den Code dafür geliefert...
void PrintElement(size_t index) { assert(index < dev.size()); cout << dev[index]; }Mhm ... kann das nicht kompelieren. versteh auch nicht recht was assert macht. assert Vllcht magst du das einmal kurz auf Deutsch sagen was das macht.
131:8: Fehler: expected unqualified-id before »(« token
-
Enno schrieb:
Vllcht magst du das einmal kurz auf Deutsch sagen was das macht.
Es überprüft, ob das, was in den Klammern steht, stimmt. Sonst wird ein Fehler angezeigt (bzw. das Programm abgebrochen). In deinem Fall: Es hat keinen Sinn, einen Index zu nehmen, der größer/gleich der Größe des vector ist, also prüft er, dass der Index einen gültigen Wert hat.
Damits compiliert musst du noch den header <cassert> mit einbinden (steht auch in der von dir verlinkten Doku im Grunde mit drin). Mache dich mit den wichtigsten Headern der Standardbibliothek vertraut. (=> Grundlagenbuch)
-
pumuckl schrieb:
Enno schrieb:
Vllcht magst du das einmal kurz auf Deutsch sagen was das macht.
Es überprüft, ob das, was in den Klammern steht, stimmt. Sonst wird ein Fehler angezeigt (bzw. das Programm abgebrochen). In deinem Fall: Es hat keinen Sinn, einen Index zu nehmen, der größer/gleich der Größe des vector ist, also prüft er, dass der Index einen gültigen Wert hat.
Damits compiliert musst du noch den header <cassert> mit einbinden (steht auch in der von dir verlinkten Doku im Grunde mit drin). Mache dich mit den wichtigsten Headern der Standardbibliothek vertraut. (=> Grundlagenbuch)
Da ich es gelesen habe weiß ich das der Header mit rein muss ...
-
Enno schrieb:
Da ich es gelesen habe weiß ich das der Header mit rein muss ...
Dann kennt der Compiler auf jeden Fall auch das assert.
Falls alle Stricke reißen versuch mal den Code aufs Wesentliche zu reduzieren (siehe Link in meiner Signatur)...
-
pumuckl schrieb:
Enno schrieb:
Da ich es gelesen habe weiß ich das der Header mit rein muss ...
Dann kennt der Compiler auf jeden Fall auch das assert.
Falls alle Stricke reißen versuch mal den Code aufs Wesentliche zu reduzieren (siehe Link in meiner Signatur)...
Ich weiß ja nciht ...
Hab das einfach stumpf abgeschrieben. fehler:sysinfo.cpp:137:8: Fehler: expected unqualified-id before »(« token sysinfo.cpp:137:8: Fehler: »dev« wurde in diesem Gültigkeitsbereich nicht definiert
-
Jetzt musst du uns nurnoch sagen, welche Zeile Nr 137 ist. Ich rate mal (da du uns keinen Code zeigst): du hast einfach eine freie Funktion definiert, die mit der Stelle, wo du dev definierst, nichts zu tun hat? Dann ist das auch kein Wunder - woher soll der Compiler da wissen was dev ist? Stumpf abschreiben bringt wie du siehst nicht viel. Verstehen und an deine Situation anpassen ist die Devise.
-
pumuckl schrieb:
Jetzt musst du uns nurnoch sagen, welche Zeile Nr 137 ist. Ich rate mal (da du uns keinen Code zeigst): du hast einfach eine freie Funktion definiert, die mit der Stelle, wo du dev definierst, nichts zu tun hat? Dann ist das auch kein Wunder - woher soll der Compiler da wissen was dev ist? Stumpf abschreiben bringt wie du siehst nicht viel. Verstehen und an deine Situation anpassen ist die Devise.
Das dev Problem ist gelöst ... aber die andere Zeile leider nicht. Halt mich nicht für ganz dumm. Das ich das ganze ding in meine Klasse einbauen muss ist klar.
Es funktioniert einfach diese Zeile nicht:
std::assert(i < dev.size());
-
Enno schrieb:
Halt mich nicht für ganz dumm.
Du machst es einem sehr schwer ...
-
Belli schrieb:
Du machst es einem sehr schwer ...
Nur für dich Belli.

-
lass mal das std:: weg. Und noch was: anstelle von assert wäre es an dieser Stelle eventuell sogar besser, eine Exception zu werfen (->Grundlagenbuch), weil kein Programmierfehler vorliegt, sondern eine falsche Eingabe des Benutzers. Aber das nur so am Rande... komm erstmal mit deinem Code klar, dann kannst du dich um sowas kümmern.
Enno schrieb:
Halt mich nicht für ganz dumm.
Nun, du zeigst keinen bzw. unvollständigen Code, gehst nicht auf unsere Fragen ein, lieferst deine Aufgabenbeschreibung nur sehr bruchstückhaft, eignest dir keine Grundlagen an, liest dir die "Fragestellungs-Threads" aus pumuckels Signatur nicht durch,...
Wir versuchen (trotzdem), dir zu helfen. Gerade bei Anfängern sind es häufig so offensichtliche Sachen wie ein vergessener Header.
-
daddy_felix schrieb:
lass mal das std:: weg. Und noch was: anstelle von assert wäre es an dieser Stelle eventuell sogar besser, eine Exception zu werfen (->Grundlagenbuch), weil kein Programmierfehler vorliegt, sondern eine falsche Eingabe des Benutzers. Aber das nur so am Rande... komm erstmal mit deinem Code klar, dann kannst du dich um sowas kümmern.
Enno schrieb:
Halt mich nicht für ganz dumm.
Nun, du zeigst keinen bzw. unvollständigen Code, gehst nicht auf unsere Fragen ein, lieferst deine Aufgabenbeschreibung nur sehr bruchstückhaft, eignest dir keine Grundlagen an, liest dir die "Fragestellungs-Threads" aus pumuckels Signatur nicht durch,...
Wir versuchen (trotzdem), dir zu helfen. Gerade bei Anfängern sind es häufig so offensichtliche Sachen wie ein vergessener Header.
Ich bin ziemlich dankbar für eure Hilfen und alles.
Trotzdem denke ich, ich gehe auf alles ein. Ich lese alles 2 mal damit ich auch EDITs mit bekomme.
Ich gebe zu ich hab nur kurz in den link aus der sig rein geschaut. Werde ich nachholen. Dein tipp mit dem std hat geklappt.
Rest stimme ich zu und werde draus lernen.
-
Enno schrieb:
Es funktioniert einfach diese Zeile nicht:
std::assert(i < dev.size());Siehst du - das ist das erste mal, dass du uns den Code gezeigt hast, den du tatsächlich bei dir stehen hast. In den Beispielen von daddy_felix stand nirgendwo ein std:: drin, und wie du siehst war das Absicht.
Die Doku, die du verlinkt hast, ist zugegebenermaßen etwas irreführend:void assert (int expression);in der ersten Zeile dort ist quatsch. Allerdings steht direkt danach, dass es sich bei assert um ein Makro handelt, nicht um eine echte Funktion, und damit fällt auch std wieder weg
-
pumuckl schrieb:
Siehst du - das ist das erste mal, dass du uns den Code gezeigt hast, den du tatsächlich bei dir stehen hast. In den Beispielen von daddy_felix stand nirgendwo ein std:: drin, und wie du siehst war das Absicht.
Die Doku, die du verlinkt hast, ist zugegebenermaßen etwas irreführend:void assert (int expression);in der ersten Zeile dort ist quatsch. Allerdings steht direkt danach, dass es sich bei assert um ein Makro handelt, nicht um eine echte Funktion, und damit fällt auch std wieder weg
Danke für die erklärung.

Allerdings muss ich mir nun selber irgendwas noch mal zusammen suchen. Irgendwie brauch ich was anderes was ich wohl nicht beschreiben kann. ^^
-
Wenn du es nicht auf Deutsch (welches du recht gut kannst) beschreiben kannst, wie wie willst du es dann selber in C++ (welches du nicht wirklich kannst) beschreiben? Weißt du überhaupt selber, was du willst?
Ich habe den Verdacht, dass das was du möchtest schon gekommen ist (da so ziemlich alle Varianten hier schon zweimal oder öfters vorgeführt wurden), du es bloß nicht gemerkt hast, da du die Antworten nicht liest/verstehst, sondern auf eine Komplettlösung wartest.
-
SeppJ schrieb:
Wenn du es nicht auf Deutsch (welches du recht gut kannst Danke.) beschreiben kannst, wie wie willst du es dann selber in C++ (welches du nicht wirklich kannst) beschreiben? Weißt du überhaupt selber, was du willst?
Ich habe den Verdacht, dass das was du möchtest schon gekommen ist (da so ziemlich alle Varianten hier schon zweimal oder öfters vorgeführt wurden), du es bloß nicht gemerkt hast, da du die Antworten nicht liest/verstehst, sondern auf eine Komplettlösung wartest.
Ich habe alles hier vorgeschlagene entweder ausprobiert oder verstanden. Ich kann es gerne noch einmal versuchen alles zu erklären, was ihr sicher nicht wollt.

Ich hab auch eben hier in der Firma noch einmal nach gefragt was ich genau machen soll.
-
Morgen.
Also Jungs und vllcht ja auch Mädels.Ich hab es nun so:
bool SYSInfo::nextNet(){ if(Dev.empty()) return false; unsigned int i = 0; if(i <= Dev.size()){ return false; } i++ Dev.at(0); return true; }Das funktioniert aber nicht. Ist ja auch logisch da i kleiner ist als die Dev.size(). Nun meine Frage ist: Wie schaffe ich es das ich da keine endlos Schleife baue aber ich trotzdem meine Zahlen abfragen kann aus jedem Index.
So steht es dann in der main aus:
while(sys_info.nextNet()==true){ std::cout << "Bytes received: " << sys_info.getBytesr() << std::endl; }Ich weiß nicht vllcht wird durch den Code klar was ich vorhabe. Es soll mir für jeden Index bytes recivied ausgegeben werd. In diesem Fall ja 3 mal.