Ich habe ein Problem mit einem C++ Programm
-
Also ich arbeite mit Eclipse
-
Eclipse ist nicht gerade die beste IDE für C++. Es gibt durchaus bessere C++ IDEs:
- Code::Blocks
- Microsoft Visual Studio 2008 Express EditionBeide sind gratis und kann man völlig ohne Einschränkungen frei verwenden.
Wieso ich dir diese nenne? Anscheinend hast du Eclipse irgendwie falsch konfiguriert. Jedenfalls fehlt ein makefile, um dein Projekt zu erstellen. Eine gute C++ IDE kann dies automatisch und du musst dich darum am Anfang nicht kümmern.
Falls du es trotzdem noch mit Eclipse gelöst haben bekommen möchtest, solltest du dank eines Moderators in das Compiler/IDE Forum ziehen oder selber nochmals deine Plugin Einstellungen für C++ durchschauen. Mit C++ an sich hat dieser Fehler nichts zu tun.
Grüssli
-
Hallo
#include <iostream> #include <string> int main(int argc, char *argv[]) { unsigned int kcal, eiweiss, fett; int gesamtkcal = 0, gesamteiweiss = 0, gesamtfett = 0, count = 0; std::string rueckgaengig; //std::string r(r); <<<<<<<- Was zu Hoelle soll r sein? Falls der Fehler an der Syntax liegt: //std::string r("r"); std::cout<<"QR Code scannen (unsigned integer)\n"; std::cin>>kcal; std::cin>>eiweiss; std::cin>>fett; gesamtkcal = kcal + gesamtkcal; gesamteiweiss = eiweiss + gesamteiweiss; gesamtfett = fett + gesamtfett; rueckgaengig = "r"; //Warum ein Speicherplatz für ein Element reservieren? std::string ist ein Array, also reicht die Uebergabe std::cout<<"F"<<(char)129<<"r r"<<(char)129<<"ckg"<<(char)132<<"ngig, bitte >r< eingeben"; std::cin>>rueckgaengig; //Ich verstehe nicht ganz warum du erst ein "r" uebergibst und dann eine Abfrage machst oO //Achja und Vorsicht, ohne die string-lib zu inklduieren akzeptiert std::cin:: kein std::string! if(::strcmp(rueckgaengig.c_str(), "r") == 0) //Was zum Haenker soll das? { std::cout<<"R"<<(char)129<<"ckg"<<(char)132<<"ngig gemacht"; gesamtkcal = gesamtkcal - kcal; gesamteiweiss = gesamteiweiss - eiweiss; gesamtfett = gesamtfett - fett; count--; } std::cout<< "Energiegehalt\t" << gesamtkcal << "kcal"; std::cout<< "Gesamteiweiss\t" << gesamteiweiss << "g"; std::cout<< "Gesamtfett\t" << gesamtfett << "g"; while ( kcal != 0 || eiweiss != 0 || fett != 0 )//solange weitermachen bis alle drei 0 sind { std::cout<< "QR Code scannen\n"; std::cin>>kcal; std::cin>>eiweiss; std::cin>>fett; gesamtkcal = kcal + gesamtkcal; gesamteiweiss = eiweiss + gesamteiweiss; gesamtfett = fett + gesamtfett; std::cout<< "Energiegehalt\t" << gesamtkcal << "kcal"; std::cout<< "Gesamteiweiss\t" << gesamteiweiss << "g"; std::cout<< "Gesamtfett\t" << gesamtfett << "g"; ++count; rueckgaengig = "r"; std::cout<< "Für r"<<(char)129<<"ckgängig, bitte ´r´ eingeben"; std::cin>>rueckgaengig; if (::strcmp(rueckgaengig.c_str(), "r") == 0) { std::cout<<"R"<<(char)129<<"ckgängig gemacht"; gesamtkcal = gesamtkcal - kcal; gesamteiweiss = gesamteiweiss - eiweiss; gesamtfett = gesamtfett - fett; count--; std::cout<< "Energiegehalt\t" << gesamtkcal << "kcal"; std::cout<< "Gesamteiweiss\t" << gesamteiweiss << "g"; std::cout<< "Gesamtfett\t" << gesamtfett << "g"; } if((kcal==0) && (eiweiss == 0) && (fett ==0)) //What the fuck is inputData!? { std::cout<< "Es wird weiter gemacht"; kcal=1; eiweiss=1; fett=1; } std::cout<< "Sie haben "<<count << " Produkte gekauft"; std::cout<< "Energiegehalt\t" << gesamtkcal << "kcal"; std::cout<< "Gesamteiweiss\t" << gesamteiweiss << "g"; std::cout<< "Gesamtfett\t" << gesamtfett << "g"; }; std::cin.get(); }Mfg.
way
-
Vielen Dank!!!
Hat mir sehr geholfen!
-
Da kommt mir dennoch noch eine Frage auf, was ist das entsprechende für die equal-Methode in Java in C++. Also sozusagen irgendeine Methode mit der ich die Werte von zwei Variablen vergleichen kann...
Danke!
-
operator==. Kann im Gegensatz zu Java (grr) auch überladen werden.
-
ich habe jetzt etwas mit der Express Version herumexperimentiert, aber komme leider nicht weiter.
Wenn ich debuggen will kommt folgendes: "Fehler beim Erstellen. Möchten Sie den Vorgang fortsetzen und den letzend erfolgreichen Build ausführen?"
Woran könnte das liegen?
Wenn ich dann trotzdem weitermache erscheint ein Programm, das folgende Fehler hat, vielleicht könntet ihr mir da Tips geben, wie ich es machen kann.
Das Programm soll die Variablen addieren, bei einem "r" rückgängig machen und zwar bis der User nur Nullwerte eingibt. Er kann aber auch dies Rückgängig machen indem er noch ein R eingibt.
Ich wäre für Hilfe sehr dankbar.
using namespace std;using namespace std; #include <iostream> #include <string> int main(int argc, char *argv[]) { int kcal,eiweiss,fett; int gesamtkcal = 0,gesamteiweiss = 0,gesamtfett = 0, count = 0; String rueckgaengig; cout<< "QR Code scannen\n"; cin>>kcal; cin>>eiweiss; cin>>fett; gesamtkcal = kcal + gesamtkcal; gesamteiweiss = eiweiss + gesamteiweiss; gesamtfett = fett + gesamtfett; cout<< "Für rueckgaengig, bitte ´r´ eingeben\n"; /*im ganzen Programm, werden die Zeilenzeichen nicht akzeptiert, woran kann das liegen? Habe ich hier einen Fehler?*/ cin>>rueckgaengig; if (rueckgaengig=="r") {cout<<"Rueckgängig gemacht!\n"; gesamtkcal = gesamtkcal - kcal; gesamteiweiss = gesamteiweiss - eiweiss; gesamtfett = gesamtfett - fett; count--;} cout<< "Energiegehalt\t" << gesamtkcal << "kcal\n"; cout<< "Gesamteiweiss\t" << gesamteiweiss << "g\n"; cout<< "Gesamtfett\t" << gesamtfett << "g\n"; while ( kcal != 0 || eiweiss != 0 || fett != 0 ) /*die Schleife soll solange weitermachen bis alle drei Werte null sind. Bisher macht sie ewig weiter!*/ { cout<< "QR Code scannen\n"; cin>>kcal; cin>>eiweiss; cin>>fett; gesamtkcal = kcal + gesamtkcal; gesamteiweiss = eiweiss + gesamteiweiss; gesamtfett = fett + gesamtfett; cout<< "Energiegehalt\t" << gesamtkcal << "kcal\n"; cout<< "Gesamteiweiss\t" << gesamteiweiss << "g\n"; cout<< "Gesamtfett\t" << gesamtfett << "g\n"; ++count; rueckgaengig = new String( "r" ); cout<< "Für rueckgaengig, bitte ´r´ eingeben\n"; cin>>rueckgaengig; if (rueckgaengig==r) {cout<<"Rueckgaengig gemacht\n"; gesamtkcal = gesamtkcal - kcal; gesamteiweiss = gesamteiweiss - eiweiss; gesamtfett = gesamtfett - fett; count--; cout<< "Energiegehalt\t" << gesamtkcal << "kcal\n"; cout<< "Gesamteiweiss\t" << gesamteiweiss << "g\n"; cout<< "Gesamtfett\t" << gesamtfett << "g\n";} if ( rueckgaengig=="r"&& kcal==0 && eiweiss ==0 && fett ==0) /*diese Zeile wird komischerweise immer aufgerufen, sobald ich nur Nullwerte eingebe. Sie soll aber nur in Kombination mit dem "r" kommen!*/ {cout<< "Es wird weiter gemacht!\n"; kcal=1; eiweiss=1; fett=1; } } count=count+1; /*das erhöht mir irgendwie die Variable count gar nicht um eins. Ich habe es auch so versucht: cout<< "Sie haben "<<(count+1) << " Produkte gekauft\n";*/ cout<< "Sie haben "<<count << " Produkte gekauft\n"; cout<< "Energiegehalt\t" << gesamtkcal << "kcal\n"; cout<< "Gesamteiweiss\t" << gesamteiweiss << "g\n"; cout<< "Gesamtfett\t" << gesamtfett << "g\n"; }
-
Schreib zuerst das using hinter die inlcudes
#include <iostream>
#include <string>
using namespace std;Danach übersetzt du deinen Quelltext (STRG und F7) und siehst dir die Fehlermeldungen an, die du entweder korrigieren kannst oder hier postest.
Falls der Compiler keinen Fehler bringt, dann erstellst du erst das Projekt (F7) und siehst dir da die Fehlermeldungen an.
-
ich habe das string jetzt durch ein char erstetzt. Aber wie kann ich machen, dass das eingelesene als char erkannt wird? Und irgendwie funktioniert deswegen der == Operator nicht.
Was kann ich da machen?1>.\meinAdding.cpp(30) : error C2446: '==': Keine Konvertierung von 'const char *' in 'int'
1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
1>.\meinAdding.cpp(30) : error C2040: '==': 'int' unterscheidet sich von 'const char [2]' in Bezug auf die Anzahl vorgenommener Dereferenzierungen
1>.\meinAdding.cpp(65) : error C2065: 'r': nichtdeklarierter Bezeichner
1>.\meinAdding.cpp(74) : error C2446: '==': Keine Konvertierung von 'const char *' in 'int'
1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
1>.\meinAdding.cpp(74) : error C2040: '==': 'int' unterscheidet sich von 'const char [2]' in Bezug auf die Anzahl vorgenommener Dereferenzierungen1>AddingVersuch - 5 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
-
mal so nebenbei: die Klasse heisst in C++ "string", nicht "String". In der Standardbibliothek beginnen alle Klassen mit einem kleinen zeichen im Namen.
-
sorry, aber das hatte ich im Programm groß...
-
Du kannst nicht versuchen einen "nicht-Zeiger" mit new zu allokieren.
rueckgaengig = new String( "r" );Wenn du es so machst, kannst du einen deinen string nicht mit diesem einem Buchstaben vergleichen, schließlich ist das eine std::string und das andere char* und die beiden kannste nunmal nicht so einfach miteiander vergleichen.
-
so habe ich das verändert (nur programmausschnitt):
int main(int argc, char *argv[]) { int kcal,eiweiss,fett; int gesamtkcal = 0,gesamteiweiss = 0,gesamtfett = 0, count = 0; char rueckgaengig; cout<< "QR Code scannen\n"; cin>>kcal; cin>>eiweiss; cin>>fett; gesamtkcal = kcal + gesamtkcal; gesamteiweiss = eiweiss + gesamteiweiss; gesamtfett = fett + gesamtfett; cout<< "Für rueckgaengig, bitte ´r´ eingeben\n"; /*im ganzen Programm, werden die Zeilenzeichen nicht akzeptiert, woran kann das liegen? Habe ich hier einen Fehler?*/ cin>>rueckgaengig; if (rueckgaengig=="r") {cout<<"Rueckgängig gemacht!\n"; gesamtkcal = gesamtkcal - kcal; gesamteiweiss = gesamteiweiss - eiweiss; gesamtfett = gesamtfett - fett; count--;} cout<< "Energiegehalt\t" << gesamtkcal << "kcal\n"; cout<< "Gesamteiweiss\t" << gesamteiweiss << "g\n"; cout<< "Gesamtfett\t" << gesamtfett << "g\n";
-
kann mir jemand helfen?