Mein erstes Programm, was ist falsch ??
-
high_med schrieb:
...lässt sich noch nicht ausführen..
ja natürlich nicht, siehe meinen letzten beitrag
-
Michael E. schrieb:
borg schrieb:
Michael E. schrieb:
Boah, borg kann schon Anfängeraufgaben lösen
ihr werdet alle staunen wenn meine wpc lösung die schnellste ist
Es geht einfach drum, dass nicht gefragt ist, wie dus machen würdest. Du hast außerdem nur ein klein bisschen was geändert, sodass man noch nicht mal was von ner anderen Vorgehensweise lernen kann.
Lol, MichaelE. entscheidet was gefragt ist und was nicht
-
No comment.
-
Ich nerve mich ja schon selber, Ihr entschuldigt...
Die Fehler:
Gerade oder ungerade.obj : error LNK2001: Nichtaufgeloestes externes Symbol "void __cdecl teil(void)" (?teil@@YAXXZ)
Debug/Gerade oder ungerade.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.Gerade oder ungerade.exe - 2 Fehler, 0 Warnung(en)
#include <iostream> using namespace std; int main() { int* a; a = new int; int b = 2; void nteil(), teil(); cout << "Bitte geben Sie eine Zahl ein: "; cin >> *a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt if (*a % b == 1) { void nteil(); } else { teil(); } return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int zeiga) { cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n"; }
Ach Menno....
-
Du kannst eine Funktion nicht in einer anderen deklarieren, das musst du vor main() machen.
Ich nerve mich ja schon selber, Ihr entschuldigt...
Frag soviel du willst und noch mehr. Sonst lernt man ja nie
-
Also gut habe jetzt das void nteil(), teil();
vor int main()geschoben, aber die Fehler bleiben noch immer...
#include <iostream> using namespace std; void nteil(), teil(); int main() { int* a; a = new int; int b = 2; cout << "Bitte geben Sie eine Zahl ein: "; cin >> *a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt if (*a % b == 1) { nteil(); } else { teil(); } return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int zeiga) { cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n"; }
und ist das hier nicht irgendwie doppelt gemoppelt ??
int* a; a = new int;
kommt mir vor wie eine doppeldeklaration oder sowas...
oder irre ich mich ? (hier auch schon wieder ?):)
-
Michael E. schrieb:
Es geht einfach drum, dass nicht gefragt ist, wie dus machen würdest. Du hast außerdem nur ein klein bisschen was geändert, sodass man noch nicht mal was von ner anderen Vorgehensweise lernen kann.
jetzt tust du mir aber unrecht, ich hab in meinem ersten posting an seinen code kommentare dabei geschrieben was er falsch gemacht hat.
-
ahhhhhhhhhh, wie oft den noch?
die deklaration für diese funktion:
void teil(int zeiga)
muß auch dem entsprechend aussehen:
void teil(int);
frag soviel du willst, aber nicht immer das gleiche
-
Du musst teil(int zeiga) auch noch was übergeben.
und dann kannst du nicht 2 Funktionen in einem Rutsch deklarieren.
Also nichtvoid nteil(), teil(int zeiga);
sondern
void nteil(); void teil(int zeiga);
und a = new int ist nicht doppelt gemoppelt, da du ja erst noch Speicher reservieren musst für das worauf a zeigt. Ohne ist nicht definiert wohin a zeigt.
-
und hier das gleiche:
[cpp]
...
else
{
teil(a);
}
return 0;
...
[/cpp]
-
//edit entfernt
-
Nee Jungs verstehe das ja auch nicht alles was ihr so schreibt...
also bitte nicht aufregen, habe das jetzt so geändert...#include <iostream> using namespace std; void nteil(); void teil(); int main() { int* a; a = new int; int b = 2; cout << "Bitte geben Sie eine Zahl ein: "; cin >> *a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt if (*a % b == 1) { nteil(); } else { teil(); } return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int zeiga) { cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n"; }
(Wenn das vorbei ist änder ich meinen Namen...)
-
Nee Jungs verstehe das ja auch nicht alles was ihr so schreibt...
also bitte nicht aufregen, habe das jetzt so geändert...#include <iostream> using namespace std; void nteil(); void teil(); int main() { int* a; a = new int; int b = 2; cout << "Bitte geben Sie eine Zahl ein: "; cin >> *a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt if (*a % b == 1) { nteil(); } else { teil(); } return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int zeiga) { cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n"; }
(Wenn das vorbei ist änder ich meinen Namen...)
-
Na ist auch egal, hab eh kein Bock mehr,
Gute N8
-
high_med schrieb:
#include <iostream> using namespace std; void nteil(); void teil(int);//<--- wichtig int main() { int* a; a = new int; int b = 2; cout << "Bitte geben Sie eine Zahl ein: "; cin >> *a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt if (*a % b == 1) { nteil(); } else { teil(*a); } return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int zeiga) { cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n"; }
-
Ok, nun wurde oft was gepostet.
Wollte das ganze nur zusammen fassen und kleine Verbesserungen einfügen#include <iostream> using namespace std; void nteil(); // das sind Prototypen, ausprogrammieren tust Du weiter unten void teil(int); int main() { int* a = new int; // so könnte man es kürzer schreiben, durch das new wird a im Heap angelegt... int b = 2; // b wird im Stack angelegt, muss nicht freigegeben werden cout << "Bitte geben Sie eine Zahl ein: "; cin >> *a; if (*a % b == 1) // weil a ein Zeiger ist, greifst Du mit *a auf den Inhalt zu (dereferenzieren) { nteil(); } else { teil(); } delete a; //... und wenn Du Speicher im Heap anlegst, solltest Du ihn wieder freigeben return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } //der Prototyp war void teil(int), also musst es hier genauso aussehen (1 int als Parameter) void teil(int zeiga) { cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n"; }
Wenn Du die Funktionen teil/nteil über der main ausprogrammierst, dann brauchst Du die Prototypen nicht.
Beides geht!
-
...und nun hab ich vergessen, dass in der main beim Aufruf der Funktion teil einen Parameter zu übergeben.
Der Aufruf muss so sein... else { teil( *a ); } ...
-
enno-tyrant schrieb:
ahhhhhhhhhh, wie oft den noch?
die deklaration für diese funktion:
void teil(int zeiga)
muß auch dem entsprechend aussehen:
void teil(int);
frag soviel du willst, aber nicht immer das gleiche
Vielleicht weiss er ja einfach nicht wie deklaration und definition zusammen hängen.
Also mal grob zum aufbau eines programms.
Ums einfach zu halten beschränke ich mich auf funktionen.
Ok du hast in deinem program 3 funktionen.
nteil,teil und main.
main ist der programmeinstiegspunkt.
In der main funktion verwendest du die funktionen nteil und teil.
Stell dir vor du bist der compiler und liesst dir das durch. Du fängst also in der main an.
int *a; //alles klar ich baue einen zeiger auf einen integer a=new int; //ok den zeiger den ich vorhin angelegt hab füll ich mal mit leben int b=2 //ok ich leg einen integer an und geb ihm den wert 2 //... hier folgen die ganzen ausgaben und die abfrage //dann kommt nteil(); //ok ich soll eine funktion aufrufen (nteil) hmmm ich wusste garnicht dass es eine funktion nteil gibt, ich weiss garnicht wie die ausieht ich hat mir keiner gesagt .. ich geb mal nen fehler aus teil(*a); //hmm teil aufrufen mit dem wert von a als parameter ... mir sagte niemand dass ich so eine funktion brauche, hat mir keiner gesagt... ich geb mal nen fehler aus
Der compiler hat also keine ahnung was teil oder nteil ist... er kann sich "denken" dass es funktionen sind und er kann sich auch "denken" dass die erste keine parameter und die zweite einen integer als parameter erwartet.
Für solche fälle zeigt man dem compiler welche funktionen es gibt.
//declaration void nteil(); //hmm ok ich merk mir mal dass die funktion nteil existiert und keine parameter erwartet, ich erwarte dass man mir später sagt was sie genau macht void teil(int); //das selbe wie oben nur dass ich weiss dass sie einen integer als parameter erwartet... int main(){ //.... wieder wie in oben nteil(); //ok ich weiss dass es die funktion gibt weiss aber noch nich wie sie aussieht .. ich guck mir mal den rest an ...(guck .. ah da unten steht ja auch was sie macht) } //definition //stimmt vom körper her mit der void nteil() überein //jetz steht hier bestimmt was die funktion macht .. mal gucken void nteil(){ //ausgabe ... ah ich soll also was ausgeben }
So macht das der compiler zwar nicht, aber so kannst du es dir vorstellen.
Wichtig ist vielleicht noch dass du zunächst mal die zeiger weglässt wenn es nicht zur aufgabe gehört und einfach mit integern arbeitest.
Ich hoffe ich hab nicht mehr verwirrt als geholfen.
-
wie wär's ganz einfach mit
#include <iostream> #include < using namespace std; int main() { int a, b = 2; void nteil(int *), teil(int *); cout << "Bitte geben Sie eine Zahl ein: "; cin >> a; if (a % b == 1) { nteil(); } else { teil(); } system("pause"); return 0; } void nteil(int *a) { cout << "\nDie von Ihnen eingegebene Zahl " << *a << " ist nicht durch 2 teilbar!\n"; } void teil(int *a) { cout << "\nDas Ergebnis der Division lautet: " << (*a/2) << "\n"; }
-
Olaf Albrecht schrieb:
wie wär's ganz einfach mit
... void nteil(int *), teil(int *); ... nteil(); // <--- was ist damit? ... teil(); // <--- was ist dami? ...void nteil(int *a) ...
das ist genau wieder so'n scheiß