Variable inkrementieren
-
Hey Leute,
in möchte in einer Funktion eine Variable um den Wert eins imkrementieren.
Dazu initialisiere ich die Vatriable als static und inkremtiere diese in meiner Funktion sukzessiv.Quellcode:
virtual void RunLoop
{
static int i=1;i+=1;
printf("Der Wert der Variablen i beträgt: %d\n",i);
}Das funktioniert soweit auch. Wenn ich in der Funktion Runloop nun über
dynamic_cast auf andere Funktion zugreife, wird der Wert hingegen nicht mehr inkrementiert. Warum, was muss ich ändern? Vielen Dank für eure Hilfe.
-
printf("Der Wert der Variablen i beträgt: %d\n",i);Dafür rüge ich dich.
std::cout << "Der Wert der Variablen i beträgt: " << i << '\n';Wenn ich in der Funktion Runloop nun über dynamic_cast auf andere Funktion zugreife
Ich hoffe beim heiligen camper dass du nicht etwa
dynamic_castaufthisanwendest...Warum, was muss ich ändern?
Wer weiß das schon? Lies ein gutes Buch.
-
Danke für deinen direkten höflichen Lösungsvorschlag. Wer kann mir eine vernünftige Antwort geben?
-
C++Pete schrieb:
Wer kann mir eine vernünftige Antwort geben?
Keiner, weil du keinen weiteren Code postest (wie immer?).

-
Deine Frage ergibt -- mal wieder -- nur wenig Sinn. Wie wärs mit mehr Code?
-
virtual void RunLoop
{
static int i=1;ARM* px=dynamic_cast<ARM*>(p_controller);
if (px)
px->StatusPrint();i+=1;
printf("Der Wert der Variablen i beträgt: %d\n",i);
}Der Zeiger p_controller ist vom Typ der Klasse Base
Die Klasse ARM erbt alles von der Klasse Base
-
Ist denn das, worauf p_controller zeigt, vom Typ ARM? Falls ja: Wieso ist p_controller nicht vom Typ ARM*? Fehldesignalarm.
edit: Ach, du sagst selber, es wäre vom Typ Base, nicht ARM. Ist doch klar, dass das nicht geht, genau dazu ist der dynamic_cast doch da. Trotzdem Fehldesignalarm, da der Code dann noch weniger Sinn macht, wenn du schon zur Compilezeit weißt, dass der Cast fehlschlagen muss.
Sone schrieb:
Lies ein gutes Buch.
Egal was du von Sones Ton hältst, er hat absolut Recht. Der Code ist totaler Murks auf übelstem Frickelniveau. Globale Variablen, wildes Casten, typunsichere Funktionen, komische Vererbungshierarchien, statische Daten. So sollte man niemals programmieren, das provoziert bloß selbstverursachte Fehler. Wie du gerade selber merkst.
-
alternativ auch: ++variable;
Repraesentiert noch direkter die Idee des Inkrementierens... Gilt auch fuer das Dekrementieren: --variable;beides auch auf Pointer, wenn man sie mal verwendet, anwendbar

mfg
HarteWare
-
SeppJ schrieb:
Sone schrieb:
Lies ein gutes Buch.
Egal was du von Sones Ton hältst, er hat absolut Recht. Der Code ist totaler Murks auf übelstem Frickelniveau. Globale Variablen, wildes Casten, typunsichere Funktionen, komische Vererbungshierarchien, statische Daten. So sollte man niemals programmieren, das provoziert bloß selbstverursachte Fehler. Wie du gerade selber merkst.
Entgegen anscheinend weitverbreiteter Ansicht haben Fehler konkrete Fehlerursachen. Die haben wir hier noch nicht gefunden. Du glaubst hoffentlich nicht wirklich, dass ein dynamic_cast oder vermeintliches "Fehldesign" (das BTW ziemlich sicher nicht von C++Pete stammt) dazu führen, dass weiter unten eine damit völlig unzusammenhängende Variable nicht inkrementiert wird.
-
Bashar schrieb:
Entgegen anscheinend weitverbreiteter Ansicht haben Fehler konkrete Fehlerursachen. Die haben wir hier noch nicht gefunden. Du glaubst hoffentlich nicht wirklich, dass ein dynamic_cast oder vermeintliches "Fehldesign" (das BTW ziemlich sicher nicht von C++Pete stammt) dazu führen, dass weiter unten eine damit völlig unzusammenhängende Variable nicht inkrementiert wird.
Wo solche Sachen drin sind und solche Fragen gestellt werden, vermute ich
a) Dass da jede Menge UB drin ist und vermutlich noch viel mehr Funktionen mit Nebeneffekten, die wer weiß was machen
b) Dass die Fehlerbeschreibung äußerst ungenau ist. Vielleicht heißt "wird nicht erhöht" bei ihm auch so viel wie "stürzt vorher mit Exception ab".Das b) könnte auch genau die konkrete Fehlerursache sein. Vielleicht hat er ein try catch drumherum, ruft das ganze N mal auf, davon kommt der Code aber bloß M < N mal beim i+=1 an, da bloß M der Objekte tatsächlich ARMs sind, und er wundert sich nun, warum i != N.
Aber ja: Die eigentlich Ursache ist schlampige Vorgehensweise, egal was der konkrete Fehler ist. Wer schlampige Codebeispiele in einer schlampig formulierten Frage in schlampig geschriebenem Deutsch zeigt, der programmiert auch sonst schlampig und braucht sich über viele Fehler nicht zu wundern. Das weiß ich einfach aus Erfahrung. Da reicht normalerweise sogar nur eines der drei Kriterien, um das sagen zu können.
edit: Wobei C++-Petes Deutsch ganz in Ordnung ist. Da ist er gedanklich durch den Rest des Beitrags zu unrecht schon in der Schublade der Sprachschlamper gelandet.
-
Danke für das Kompliment :). Was macht ihr eigentlich beruflich?
-
C++Pete schrieb:
Danke für deinen direkten höflichen Lösungsvorschlag. Wer kann mir eine vernünftige Antwort geben?
Shit in. Shit out. Auch wenn man wollte, könnte man dir nicht helfen, weil du dir selbst im Weg stehst. Ich sehe hier nichts, was man "bearbeiten" könnte. Es sind nur sinnfrei aussehende Code-Fetzen.
-
krümelkacker schrieb:
Shit in. Shit out. Auch wenn man wollte, könnte man dir nicht helfen, weil du dir selbst im Weg stehst. Ich sehe hier nichts, was man "bearbeiten" könnte. Es sind nur sinnfrei aussehende Code-Fetzen.
*ohne Code tags