Hilfe mit meinem ersten C++ Programm
-
#include <iostream> using namespace std; int OpAdd() { cout<<"Enter a number to add."; cin >>NumOne; cout<<"Enter a second number to add."; cin >>NumTwo; NumResult=NumOne+NumTwo; cout<<NumResult<<endl; cout<<"\n"; system("pause"); OpSelect } int OpSub() { cout<<"Enter a number to subtract."; cin >>NumOne; cout<<"Enter a second number to subtract."; cin >>NumTwo; NumResult=NumOne-NumTwo; cout<<NumResult<<endl; cout<<"\n"; system("pause"); OpSelect } int OpMulti() { cout<<"Enter a number to multiply."; cin >>NumOne; cout<<"Enter a second number to multiply."; cin >>NumTwo; NumResult=NumOne*NumTwo; cout<<NumResult<<endl; cout<<"\n"; system("pause"); OpSelect } int OpDiv() { cout<<"Enter a number to divide."; cin >>NumOne; cout<<"Enter a second number to divide."; cin >>NumTwo; NumResult=NumOne/NumTwo; cout<<NumResult<<endl; cout<<"\n"; system("pause"); OpSelect } int OpExit() { cout<<"Thanks for using UltraCalc2000!"<<endl; system("pause"); return 0; } int OpSelect() { cout<<"1)Add"<<endl; cout<<"2)Subtract"<<endl; cout<<"3)Multiply"<<endl; cout<<"4)Divide"<<endl; cout<<"5)Exit"<<endl; cin >>OpMethod; if (OpMethod==1) { OpAdd } if (OpMethod==2) { OpSub } if (OpMethod==3) { OpMulti } if (OpMethod==4) { OpDiv } if (OpMethod==5) { OpExit } int main() { public long OpMethod,NumOne,NumTwo,NumResult; OpSelect }Beim Kompilieren gibt es 43 Fehler. Kann mir jemand bitte kurz sagen, wo die wichtigsten Fehler liegen? Die Funktionsaufrufe sind bestimmt falsch und die Variablen muss ich bestimmt auch anders deklarieren... aber wie? Danke!

-
In deinen methoden hast du vergessen deine Variablen die du einlesen willst, mit den richtigen Datentypen zu deklarieren. Kann es sein das du aus der Java Ecker kommst? Bzw hast du dir mal ein Tutorial durchgelesen?
-
Firefighter schrieb:
In deinen methoden hast du vergessen deine Variablen die du einlesen willst, mit den richtigen Datentypen zu deklarieren. Kann es sein das du aus der Java Ecker kommst? Bzw hast du dir mal ein Tutorial durchgelesen?
Was hat das mit Java zu tun?
Simon
-
bin erst seit gestern bei c++, war davor nur mit visual basic unterwegs... darum die leichtfertigen fehler. heisst das, dass ich in jeder methode die variablen deklarieren muss? kann ich diese nicht in einem mal irgendwie global deklarieren? was ist sonst noch falsch im code? danke..
-
- lokale Variablen sind nur innerhalb eines {} Blockes bekannt.
- lokale Variablen haben keinen Zugriffsspezifizierer public.
- Funktionen ruft man mit Parametern in runden Klammern auf. Wenn die Funktion keine Parameter erwartet, mit einem leeren Klammernpaar ().
- auch Anweisungen, die Funktionen aufrufen, werden mit Semikolon abgeschlossenAuch mein Rat lautet: Arbeite ein Tutorial durch, welches Funktionen, Scopes, Parameter und Rückgabewerte abdeckt.
EDIT:
Meines Wissens sind auch in VB lokale Variablen nur innerhalb eines Blockes, zumindest nur innerhalb der Sub oder Function, in der sie definiert wurden, bekannt.
-
@ simon
public long OpMethod,NumOne,NumTwo,NumResultdas hier hatte mich an java erinnert, aber wenn er sagt er kommt von vb, dann ist es mir auch klar.
Naja globale Variablen sind immer schlecht, aber in VB leider gang und gebe, außer man programmiert ordentlich.
Wenn du neue variablen in deinen funktionen benutzt, solltest du diese auch deklarieren sonst weiß der PC doch gar nicht wohin er was speichern soll?!
-
#include <iostream> using namespace std; int OpAdd() { long OpMethod,NumOne,NumTwo,NumResult; cout<<"Enter a number to add."; cin >>NumOne; cout<<"Enter a second number to add."; cin >>NumTwo; NumResult=NumOne+NumTwo; cout<<NumResult<<endl; cout<<"\n"; system("pause"); OpSelect(); } int OpSub() { long OpMethod,NumOne,NumTwo,NumResult; cout<<"Enter a number to subtract."; cin >>NumOne; cout<<"Enter a second number to subtract."; cin >>NumTwo; NumResult=NumOne-NumTwo; cout<<NumResult<<endl; cout<<"\n"; system("pause"); OpSelect(); } int OpMulti() { long OpMethod,NumOne,NumTwo,NumResult; cout<<"Enter a number to multiply."; cin >>NumOne; cout<<"Enter a second number to multiply."; cin >>NumTwo; NumResult=NumOne*NumTwo; cout<<NumResult<<endl; cout<<"\n"; system("pause"); OpSelect(); } int OpDiv() { long OpMethod,NumOne,NumTwo,NumResult; cout<<"Enter a number to divide."; cin >>NumOne; cout<<"Enter a second number to divide."; cin >>NumTwo; NumResult=NumOne/NumTwo; cout<<NumResult<<endl; cout<<"\n"; system("pause"); OpSelect(); } int OpExit() { cout<<"Thanks for using UltraCalc2000!"<<endl; system("pause"); return 0; } int OpSelect() { long OpMethod,NumOne,NumTwo,NumResult; cout<<"1)Add"<<endl; cout<<"2)Subtract"<<endl; cout<<"3)Multiply"<<endl; cout<<"4)Divide"<<endl; cout<<"5)Exit"<<endl; cin >>OpMethod; if (OpMethod==1) { OpAdd(); } if (OpMethod==2) { OpSub(); } if (OpMethod==3) { OpMulti(); } if (OpMethod==4) { OpDiv(); } if (OpMethod==5) { OpExit(); } } int main() { OpSelect(); }Danke für eure Hilfe und Geduld

Nun bekomme ich nur noch einen Fehler und zwarerror C3861: "OpSelect": Bezeichner wurde nicht gefunden.
Was ist jetzt noch falsch?

-
vor Deiner ersten Funktion (OpAdd) fehlt die Zeile
int OpSelect();Stichwort: Prototype.
-
was bewirkt die zeile?
wenn ich sie wie empfohlen einfüge, bekomme ich einige neue fehler beim builden, die besagen, dass die einzelnen funktionen einen wert zurückgeben müssen
-
Ja ist richtig, wenn du den Funktionen schon einen int Rückgabewert gibts, wäre es nicht schlecht, diesen auch zurückzugeben

-
#include <iostream> #include <string> using namespace std; long OpMethod,NumOne,NumTwo,NumResult; string StrName; void OpSelect(); void OpAdd() { system("cls"); cout<<"Enter a number to add."; cin >>NumOne; cout<<"Enter a second number to add."; cin >>NumTwo; NumResult=NumOne+NumTwo; cout<<"The result is "<<NumResult<<"."<<endl; cout<<endl; system("pause"); OpSelect(); } void OpSub() { system("cls"); cout<<"Enter a number to subtract."; cin >>NumOne; cout<<"Enter a second number to subtract."; cin >>NumTwo; NumResult=NumOne-NumTwo; cout<<"The result is "<<NumResult<<"."<<endl; cout<<endl; system("pause"); OpSelect(); } void OpMulti() { system("cls"); cout<<"Enter a number to multiply."; cin >>NumOne; cout<<"Enter a second number to multiply."; cin >>NumTwo; NumResult=NumOne*NumTwo; cout<<"The result is "<<NumResult<<"."<<endl; cout<<endl; system("pause"); OpSelect(); } void OpDiv() { system("cls"); cout<<"Enter a number to divide."; cin >>NumOne; cout<<"Enter a second number to divide."; cin >>NumTwo; NumResult=NumOne/NumTwo; cout<<"The result is "<<NumResult<<"."<<endl; cout<<endl; system("pause"); OpSelect(); } int OpExit() { system("cls"); cout<<"Goodbye "<<StrName<<"!"<<endl; cout<<"Thanks for using UltraCalc2000!"<<endl; system("pause"); exit(0); } void OpSelect() { system("cls"); cout<<"1)Add"<<endl; cout<<"2)Subtract"<<endl; cout<<"3)Multiply"<<endl; cout<<"4)Divide"<<endl; cout<<"5)Exit"<<endl; cin >>OpMethod; if (OpMethod==1) { OpAdd(); } if (OpMethod==2) { OpSub(); } if (OpMethod==3) { OpMulti(); } if (OpMethod==4) { OpDiv(); } if (OpMethod==5) { OpExit(); } } int main() { cout << "What's your name?"<<endl; getline (cin, StrName); system("cls"); cout << "Hello " << StrName << "."<<endl; cout << endl; system("pause"); OpSelect(); }so, es funktioniert! danke allerseits.
jedoch verstehe ich das immer noch nicht:
vor Deiner ersten Funktion (OpAdd) fehlt die Zeile
int OpSelect();Stichwort: Prototype

-
lies dir mal shade of mine's tutorial durch
ist zwar schon was älter (ne toni
) aber egal, das ist immer noch ganz gut für einsteiger...deine derzeitigen interessen werden in den ersten paar kapiteln gedeckt...
-
@alberto2000
Was sind Prototypen?
Der Prototyp ist die Deklaration einer Funktion. Damit teilst Du den Compiler mit wie die Funktion heißt und wie viel Platz er auf dem Arbeitsspeicher reservieren soll.
In C++ stehen die Deklarationen von Variablen (Platzhalter), Funktionen (Unterprogramme) und Klassen (Bausteine) in eine Headerdaite. Die Prototypen werden dazu benutzt, damit ein fremder Entwickler sehen kann, welche Funktionen ein Entwickler in seinen versteckten Quelltextdatei, die als eine Objektdatei vorliegt, verwenden kann.
In BASIC gibt es keine Headerdateien und Datentypen sind nicht erforderlich, da diese Programmiersprache die Anweisung interpretiert und nicht kompiliert.
Interpretieren bedeutet, Anweisungen werden Zeile für Zeile in Maschinensprache übersetzen.
C++ benutzt eine ganz andere Technik. Es übersetzt die Anweisungsblöcke nur einmal und das "komplett" auf einen Schlag in Maschinensprache. Damit der C++-Kompiler die Variablen und Funktionen unterscheiden kann, müssen sie deklariert werden.Was ist jetzt noch falsch?
Mir sind die if-Anweisungen ab der Zeile 82 aufgefallen. Die sind vom Syntax her nicht falsch, aber besser währe es, wenn Du in diesem Fall die Switch-Case-Anweisungen verwendest.
Beispiel:
switch(OpMethod) { case 1: OpAdd(); break; case 2: OpSub(); break; case 3: OpMulti(); break; case 4: OpDiv(); break; default: OpExit(); }