Jonsc1 Geschrieben 27. August 2005 Geschrieben 27. August 2005 Habe gerade angefangen meine ersten tapsigen Schritte mit c++ zu machen... Hab einen guten Onlinekurs gefunden der für Anfänger sehr schön aufbaut. Bin gerade dabei Variablen zu deklarieren und einen Wert zuzuweisen. Habe also testweise einmal die Variable "int zahl" deklariert. Im nächsten Schritt wollte ich der Variable "zahl" den Wert 42 zuweisen. Der Quellcode dieses kleinen Programms war also folgender: int zahl; zahl = 42; Ich benutze übrigens Dev-C++ 4.9.9.2 Wenn ich jetzt testweise mal kompiliere, erhalte ich unten folgende Fehlermeldungen für die 2te Zeile: 2 C:\Cplusplus\Unbenannt1.cpp expected constructor, destructor, or type conversion before '=' token 2 C:\Cplusplus\Unbenannt1.cpp expected `,' or `;' before '=' token Tja... da steh ich nun ich armer Thor... Kann mir jemand mit ner Erklärung inc. Fehlerbehebung aushelfen? Zitieren
carstenj Geschrieben 27. August 2005 Geschrieben 27. August 2005 Hi, post mal den Rest des Quellcodes. In den beiden Zeilen ist defintiv kein Fehler. Zitieren
Jonsc1 Geschrieben 27. August 2005 Autor Geschrieben 27. August 2005 Tja, das ist der komplette Quellcode ^^ Ich stecke noch in den Kinderschuhen und fange von 0 auf an.... Eventuell FEHLT ja was, z.B. der aufruf aus irgend ner Bibiothek der Variablen erst ermöglicht... Kann das sein? Zitieren
Corvin Gröning Geschrieben 27. August 2005 Geschrieben 27. August 2005 Da fehlt das ganze Grundgerüst. Zitieren
Jonsc1 Geschrieben 27. August 2005 Autor Geschrieben 27. August 2005 Tja, hehe... So was kann ja mal passieren wenn man noch keine Ahnung hat... Hab das Programm jetzt dementsprechend angepasst: [quote main() { int zahl; zahl = 20; } und jetzt läuft es... *froi, mein erstes c++ Programm* :bimei Danke für die Hilfe! Bitte den Tread offen lassen, werde wohl in nächster Zeit oft solche Fragen haben. Zitieren
Jonsc1 Geschrieben 27. August 2005 Autor Geschrieben 27. August 2005 Gleich die nächste Frage: Wenn man in einer Verschachtelung einer Variable einen Wert gibt... Und die Verschachtelung schliesst, dann st die Variable ausserhalb des Blocks doch nicht mehr mit diesem Wert gefüllt, oder? Zitieren
DarkSchlumpf Geschrieben 27. August 2005 Geschrieben 27. August 2005 Gleich die nächste Frage: Wenn man in einer Verschachtelung einer Variable einen Wert gibt... Und die Verschachtelung schliesst, dann st die Variable ausserhalb des Blocks doch nicht mehr mit diesem Wert gefüllt, oder? doch, ist sie Zitieren
robotto7831a Geschrieben 27. August 2005 Geschrieben 27. August 2005 Eigentlich schon. int a = 0; if (a == 0) { a = 32; } //und hier hat die Variable immer noch den Wert 32 cout a; [/code] Frank Zitieren
Jonsc1 Geschrieben 27. August 2005 Autor Geschrieben 27. August 2005 Hey Klasse wie schnell man hier Antworten bekommt... Aber wenn man in nem Übergeordneten Block die selbe Variable anders definiert hat, übernimmt sie nach dem schliessen den alten Wert oder? Also wie hier zum Beispiel: main() { int zahl; zahl = 20; { zahl = 30; } } Falls was am Code nicht stimmt, bitte verbessern... hab noch absolut keine Ahnung... :hells: Naja, die Variable würde aber nach dem schliessen des inneren Blocks wieder den Wert 20 übernehmen oder? P.s.: Gibts keinen Editieren Button? Zitieren
Bubble Geschrieben 27. August 2005 Geschrieben 27. August 2005 Naja, die Variable würde aber nach dem schliessen des inneren Blocks wieder den Wert 20 übernehmen oder? Nein, würde sie nicht. Zitieren
Leo74 Geschrieben 27. August 2005 Geschrieben 27. August 2005 Stimmt. die Klammern verändern keine Variablen Zitieren
Jonsc1 Geschrieben 28. August 2005 Autor Geschrieben 28. August 2005 Hmm... in diesem Link oben in der Anleitung für Anfänger steht aber folgendes Beispiel: { int a = 5; { // hier hat a den Inhalt 5 } { int a = 3; // hier hat a den Inhalt 3 { // a ist immer noch 3 } } // hier ist a wieder 5 } Lokale Variable Die innere Variable wird als lokale Variable bezeichnet. Für ihren Geltungsbereich überdeckt sie die außen liegende Variable a. Die außen liegende Variable existiert durchaus noch, aber aufgrund der Namensgleichheit mit der lokalen Variablen kann man bis zu deren Auflösung nicht auf sie zugreifen. Sobald das Programm den Block verlässt, in dem die lokale Variable definiert ist, wird die äußere Variable wieder sichtbar. Alle Operationen auf der lokalen Variablen berühren die äußere Variable nicht. Also was hab ich da nicht recht verstanden? Zitieren
robotto7831a Geschrieben 28. August 2005 Geschrieben 28. August 2005 Das ist ja auch was anderes. Dort hast Du innerhalb einer inneren Klammer a nochmal deklariert und somit hast Du eine lokale Variable erzeugt die genau so lange lebt bis Du aus der inneren Klammer wieder raus bist. Frank Zitieren
carstenj Geschrieben 28. August 2005 Geschrieben 28. August 2005 Hallo, durch das int vor dem a definierst du die Variable jedes Mal neu. EDIT: ...nochmal deklariert... Sie wird nicht nur deklariert, sonden definiert, denn es wird für jedes innere Variable neuer Speicher reserviert. Zitieren
Jonsc1 Geschrieben 28. August 2005 Autor Geschrieben 28. August 2005 Ah! Verstanden, danke! Wenn man eine Variable innerhalb einer Klammer definiert, ohne das sie zuvor ausserhalb einer Klammer definiert wurde, verliert sie dann ausserhalb der Klammer ebenfalls ihren Wert? Also ist sie dann auch eine Lokale, und keine Globale Variable? Zitieren
carstenj Geschrieben 28. August 2005 Geschrieben 28. August 2005 Ah! Verstanden, danke! Wenn man eine Variable innerhalb einer Klammer definiert, ohne das sie zuvor ausserhalb einer Klammer definiert wurde, verliert sie dann ausserhalb der Klammer ebenfalls ihren Wert? Sie verliert nicht nur ihren Wert, sondern wird komplett zerstört. Sie existiert nur innerhalb des Sichtbereichs (Scope). Nach der } ist Schluss, aber das wurde doch auch schon erklärt?! Also ist sie dann auch eine Lokale, und keine Globale Variable? Ja. Wieso auch? So ganz klar scheint mir das noch nicht zu sein. Globale Variablen sind immer über die gesamte Laufzeit des Programms gültig. Bei deinem Beispiel davor hattest du quasi mehrere Variablen mit dem Namen "a". Sowas ist gefährlich zu zeugt von schlechtem Stil, genau wie globale Variablen. In den meisten Fällen kann man sowas eleganter lösen. Guck dir einfach das mal an: http://tutorial.schornboeck.net/inhalt.htm Speziell das: http://tutorial.schornboeck.net/variablen.htm Zitieren
carstenj Geschrieben 28. August 2005 Geschrieben 28. August 2005 Nein. Frank Auf welche Frage bezieht sich das "Nein"? :confused: Zitieren
robotto7831a Geschrieben 28. August 2005 Geschrieben 28. August 2005 Vergiss es. War ein Denkfehler von mir. Frank Zitieren
Jonsc1 Geschrieben 28. August 2005 Autor Geschrieben 28. August 2005 Nun, hab bisher immer mit Basic.. (das alte Qbasic) "programmiert", daher hab ich die Angewohnheit solche globalen Variablen zu verwenden... Danke für die beiden Tutorials, werden mir noch ein Stück weiterhelfen! Zitieren
Jonsc1 Geschrieben 28. August 2005 Autor Geschrieben 28. August 2005 Und aufgrund des Touts die nächste(n) Frage(n): Diese beiden Zeilen: #include<iostream> using namespace std; Was bedeuten die im genauen? Dieses #include scheint ne Art Bibiothek aufzurufen die dann später Eingaben über die Tastatur etc. ermöglicht... das hab ich irgendwo gelesen. Aber zu was ist der using namespace std Befehl da? Zitieren
Klotzkopp Geschrieben 28. August 2005 Geschrieben 28. August 2005 UDieses #include scheint ne Art Bibiothek aufzurufen die dann später Eingaben über die Tastatur etc. ermöglicht... das hab ich irgendwo gelesen.Das ist so nicht ganz richtig. Die include-Direktive des Präprozessors (die fangen alle mit # an) bewirkt eigentlich nur, dass vor dem Compilieren an die Stelle der Direktive der Inhalt der angegebenen Datei (hier: iostream) kopiert wird. iostream ist eine Datei, die u.a. Deklarationen für die Konsolenein- und -ausgabestreams enthält. Aber zu was ist der using namespace std Befehl da?Befehle gibt es in C und C++ nicht Alle Objekte und Funktionen der C++-Standardbibliothek liegen im Namespace std. Um also cout benutzen zu können, muss man std::cout schreiben. Um das nicht machen zu müssen, kann man auch einzelne (oder, wie hier, alle) Objekte eines Namensraum in den globalen Namensraum "heben". Das geschieht mit Hilfe der so genannten using-Direktive. Zitieren
Jonsc1 Geschrieben 28. August 2005 Autor Geschrieben 28. August 2005 Danke! Ich sollte also immer diese beiden Sachen laden, auch bei kleineren Programmen? So, jetzt hab ich mal eine etwas dümmere Frage... ich lese das immer überall aber ganz durschaut habe ich es noch nicht: Was versteht man unter Objektorientierter Programmierung? Zitieren
Klotzkopp Geschrieben 28. August 2005 Geschrieben 28. August 2005 Danke! Ich sollte also immer diese beiden Sachen laden, auch bei kleineren Programmen?"Geladen" wird da nichts. Include-Direktiven solltest du da benutzen, wo du sie brauchst, sonst nicht. Und using-Direktiven sind ein zweischneidiges Schwert, wenn man sie auf ganze Namensräume anwendet. Einerseits ersparen sie einiges an Schreibarbeit, andererseits heben sie aber den Hauptzweck eines Namensraumes wieder auf: Die Vermeidung von Namenskonflikten. Auf keinen Fall solltest du using-Direktiven in Headerdateien benutzen, d.h. in Dateien, die selbst mittels einer include-Direktive in eine andere Datei eingebunden werden. Was versteht man unter Objektorientierter Programmierung?Das lässt sich mal eben in ein paar Worten erklären. Schau mal hier rein: http://de.wikipedia.org/wiki/Oop Zitieren
carstenj Geschrieben 28. August 2005 Geschrieben 28. August 2005 Hallo, @jonsc1: Wir du gemerkt hast, wird dir hier oft und gerne geholfen, aber du solltest nicht bei jedem Problemchen hier nachfragen. Kauf dir ein Buch, arbeitete diverse Tutorials durch und benutze google. Die Dinge, die du bisher gefragt hast, stehen in so ziemliche jedem Einsteigerbuch, und sei es auch noch so schlecht. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.