Wie erstelle ich eine Variable und füge erst später Ihren Datentypen ein ?
-
Ich muss bei einer Aufgabe dem Nutzer die Wahl lassen, ob mit Kommazahlen oder Ganzzahlen gerechnet werden soll(Datentyp int/double). Dies habe ich bis jetzt mithilfe einer If-Verzweigung getan. Nun mein Problem:
Ich muss die erstellte Variable von der der Nutzer den Datentyp variieren kann außerhalb der If-Verzweigung speichern. Aber ich muss den Datentyp erst später einfügen sobald der Nutzer ihn bestimmt hat. Wie funktioniert das ?Grüße
silent12
-
Mit einer Union:
union IntOrFloat { float Float; int Int; };
Achtung: Die Union merkt sich nicht, welchen Teil du benutzt!
-
String, dann auf den gewünschten Datentyp casten, like:
std::string text("3.14213123"); try { if(choice == 'f') { /* float */ { float f = boost::lexical_cast<float>(text); } else if(choice == 'd') /* decimal */ int d = boost::lexical_cast<int>(text); } }catch(const boost::bad_cast &ex) { std::cerr << "[boost::lexical_cast]: Couldn't cast '" << text << "' to " choice" << std::endl; }
-
Sry hab dich falsch verstanden. *remove above post*
-
Danke für die Antwort, aber bei wird mir ein Fehler bei dem int angezeigt. Muss davor schon irgendwas anderes davor definiert sein ?
-
Meine Kristallkugel ist gerade in Reparatur, deshalb wird es schwierig mit der Ferndiagnose Zeig doch mal den Code und die genaue Fehlermeldung des Compilers.
-
wenn er den code von dir 1 zu 1 abgetippt/geguttenbergt hat, könnte es ja sein, dass irgendein von ihm eingebundener header Int anders definiert per typdef oder makro...
-
Ich frage mich, was das ganze soll.
-
silent12 schrieb:
Ich muss die erstellte Variable von der der Nutzer den Datentyp variieren kann außerhalb der If-Verzweigung speichern. Aber ich muss den Datentyp erst später einfügen sobald der Nutzer ihn bestimmt hat.
Das glaube ich nicht.
Dein Programm läßt sich bestimmt auch einfacher lösen.
-
Ich glaube ich muss das Ganze umschreiben und Präprozessor-Anweisungen verwenden
-
silent12 schrieb:
Ich glaube ich muss das Ganze umschreiben und Präprozessor-Anweisungen verwenden
Wenn du deine Hausaufgaben gemacht bekommen möchtest, dann versuch bitte wenigstens selber die Aufgabenstellung zu verstehen, so dass du überhaupt nach der gewünschten Lösung fragen kannst.
-
Wann wird denn festgelegt, welcher Datentyp benutzt werden soll? Zur Laufzeit oder bereits zur Übersetzungszeit?
Die Präprozessoranweisungen helfen dir nicht, wenn es erst zur Laufzeit entschieden werden soll, da helfen möglicherweise Templates weiter.
-
templates und laufzeit widerspricht sich in meinen augen Oo
-
SeppJ schrieb:
Wenn du deine Hausaufgaben gemacht bekommen möchtest, dann versuch bitte wenigstens selber die Aufgabenstellung zu verstehen, so dass du überhaupt nach der gewünschten Lösung fragen kannst.
Genau. Oder poste wenigstens die Aufgabenstellung wörtlich, statt Deiner krass unglaubwürdigen Interpretation.
-
silent12 schrieb:
Ich glaube ich muss das Ganze umschreiben und Präprozessor-Anweisungen verwenden
Das glaub ich nicht
-
Skym0sh0 schrieb:
templates und laufzeit widerspricht sich in meinen augen Oo
Er meint so etwas:
template<typename T> void foo(); if (mit_doubles) foo<double>(); else foo<int>();
Ginge im Prinzip auch nicht allzu schwer mit dem Präprozessor zu machen, aber templates sind wesentlich besser bei der Entwicklung zu handhaben.
-
Skym0sh0 schrieb:
templates und laufzeit widerspricht sich in meinen augen Oo
template<typename value_type> void rechne_rum( value_type arg1, value_type arg2 ) { ... } int main() { if( ... ) rechne_rum<double>( 1,2 ); else rechne_rum<int>( 1,2 ); }
Edit:
Gibt´s doch nicht... um 30 sec geschlagen
-
hat aber trotzdem nichts mit laufzeit zu tun...
da steht ja schon alles beim kompilieren festes werden dann nur 2 verschiedene funktionen aufgerufen
-
Skym0sh0 schrieb:
es werden dann nur 2 verschiedene funktionen aufgerufen
Ja und es wird zur Laufzeit entschieden welche. Nur wäre eine einfache Überladung hier wohl angebrachter..
-
cooky451 schrieb:
Ja und es wird zur Laufzeit entschieden welche. Nur wäre eine einfache Überladung hier wohl angebrachter..
Es geht hier ja um 2x (oder noch öfter) die gleiche Rechnung mit unterschiedlichen Datentypen. Da sind Templates angebracht, außer du willst alles mehrfach tippen und jedes Mal die Datentypen von Hand ersetzen. Für jeden Datentyp.