Hallo Liste Ich wollte mich mal mit dem oben genannten Tolls auseinander setzten und habe nun folgendes Problem. Mit dem Designer habe ich mir eine GUI zusammengebastelt und diese in mein Projekt eingebunden. Nach dem Kompilieren laeuft auch alles. Als Problem sehe ich z.Zt. an, dass ich meinen Ablaufcode nur in der .h der GUI schreiben kann. Diese Datei ist in KDevelop aber nicht sichtbar und wenn ich diese ins das Projekt einbinde wird diese doppelt kompiliert. D.h. die Kompilierung bricht ab mit der Meldung das einige Funktionen doppelt deklariert wurden. Beispiel. GUI.ui (Die GUI Datei des Designers) In der Headerdatei die so heisst wie mein Projekt "meinprojekt.h" wird dann GUI.h includiert. Sobald ich mit dem Designer Slots anlege werden die Funktionen ja in die GUI.h geschrieben. Wenn ich nun die Exit Funktion nehme muss ich in der GUI.h ja schreiben this->close(). Ich moechte also die Slots gerne in "meinprojekt.cpp" haben und bearbeiten Nur wenn ich die Funktionen aus GUI.h loesche und in meinprojekt.cpp einfuege verschwinden die SLOTS im Designer. Ich hoffe mein Anliegen war einigermassen verstaendlich und jemand kann mir bei diesem Problem helfen! gruss Frank
Hallo Frank,
Ich wollte mich mal mit dem oben genannten Tolls auseinander setzten und habe nun folgendes Problem. Mit dem Designer habe ich mir eine GUI zusammengebastelt und diese in mein Projekt eingebunden. Nach dem Kompilieren laeuft auch alles. Als Problem sehe ich z.Zt. an, dass ich meinen Ablaufcode nur in der .h der GUI schreiben kann. Diese Datei ist in KDevelop aber nicht sichtbar und wenn ich diese ins das Projekt einbinde wird diese doppelt kompiliert. D.h. die Kompilierung bricht ab mit der Meldung das einige Funktionen doppelt deklariert wurden.
Beispiel. GUI.ui (Die GUI Datei des Designers) In der Headerdatei die so heisst wie mein Projekt "meinprojekt.h" wird dann GUI.h includiert. Sobald ich mit dem Designer Slots anlege werden die Funktionen ja in die GUI.h geschrieben. Wenn ich nun die Exit Funktion nehme muss ich in der GUI.h ja schreiben this->close().
Ich moechte also die Slots gerne in "meinprojekt.cpp" haben und bearbeiten Nur wenn ich die Funktionen aus GUI.h loesche und in meinprojekt.cpp einfuege verschwinden die SLOTS im Designer.
Ich hoffe mein Anliegen war einigermassen verstaendlich und jemand kann mir bei diesem Problem helfen!
ich habe auch schon krampfhaft gesucht. Und ich habe etwas gefunden: http://arfa.komnas.com/~jeffry_johar/linuxlaht1/t1.html Wenn man es so macht entstehen die Slots in der *.cpp-Datei. Auch eine *.h-Datei ist vorhanden in der die Slots deklariert werden. Nur läßt sich das Programm nicht ohne manuellen Eingriff kompilieren. Das ist eigentlich nicht tragbar. Ich habe mich entschieden die GUI von Hand zu definieren. Aber vielleicht kann mich einer in der Liste eines Besseren belehren. Ich würde mich darüber freuen. Gruß Ulrich
Hallo
Ich hoffe mein Anliegen war einigermassen verstaendlich und jemand kann mir bei diesem Problem helfen!
ich habe auch schon krampfhaft gesucht. Und ich habe etwas gefunden: http://arfa.komnas.com/~jeffry_johar/linuxlaht1/t1.html Wenn man es so macht entstehen die Slots in der *.cpp-Datei. Auch eine *.h-Datei ist vorhanden in der die Slots deklariert werden. Nur läßt sich das Programm nicht ohne manuellen Eingriff kompilieren. Das ist eigentlich nicht tragbar. Ich habe mich entschieden die GUI von Hand zu definieren. Aber vielleicht kann mich einer in der Liste eines Besseren belehren. Ich würde mich darüber freuen.
Genau an diese Anleitung hatte ich mich gehalten. Habe sie vor kurzem über die kdevelop Seite gefunden. Genau durch diese Beschreibung ergibt sich ja mein Problem. Könntest Du mir ein HowTo geben wie Du es gemacht hast ? Ich werde nebenbei mal weitersuchen. Irgendwie muss es ja machbar sein. Ich habe gelesen, das KDevelop 3 demnächst näher mit dem QTDesigner zusammenarbeitet. Da bin ich mal drauf gespannt! Gruß Frank
Hallo allerseits, ich habe ein Problem mit den File-Dialogen von Qt. Es hat zwar nicht direkt etwas mit SuSE zu tun, aber da hier in letzter Zeit ein paar Qt-Fragen an der Reihe waren und sich meist auch jemand fand, der sie beantworten konnte, dachte ich mir, ich stelle meine Frage trotzdem mal: Wir verwenden in einer Applikation, die sowohl unter Windows als auch unter Linux laufen soll, die QFileDialog-Klasse für unsere Datei-Auswahl-Dialoge. Das funktioniert im Großen und Ganzen recht gut, nur unter Windows ergibt sich das Problem, daß in dem Look-in-Feld, das anzeigt, in welchem Verzeichnis ich gerade bin, die Laufwerke fehlerhaft dargestellt werden. Man sieht dort lediglich eine Liste folgender Art: A: B: C: D: ... Das ist natürlich unbefriedrigend. Meist haben solche Laufwerke ja auch irgendeine Bezeichnung (Festplatten zum Beispiel oder Netzlaufwerke). Normale Windows-File-Dialoge zeigen die einem auch, nur die Qt-File-Dialoge nicht. Nun habe ich schon verschiedentlich recherchiert (bei Trolltech und mittels Google), aber ich habe noch keine Lösung für dieses Problem gefunden. Weiß jemand von Euch, wie man da Abhilfe schaffen kann? Ich bedanke mich schon mal im voraus für etwaige Antworten und bitte nochmals um Entschuldigung, daß das leicht off-topic ist. Herzliche Grüße, Alexander. -- Alexander Glintschert, MicroDiscovery GmbH Marienburger Strasse 1, D-10405 Berlin, Germany Tel.: +49-(0)30-44350900, Fax: +49-(0)30-443509010 alexander.glintschert@microdiscovery.de http://www.microdiscovery.de
Hi Alexander, Welche Qt-Version nutzt Du unter Windoof ? Ich hab sowohl mit der 2.3 als auch mit der 3.1 keine solchen Probleme gehabt... Kannst Du mal den Code posten, den Du zum Aufruf der Klasse nutzst, so dass man das evtl mal nachvollziehen kann? Bis denn, Christian
Hi Christoph!
Welche Qt-Version nutzt Du unter Windoof ? Ich hab sowohl mit der 2.3 als auch mit der 3.1 keine solchen Probleme gehabt... Kannst Du mal den Code posten, den Du zum Aufruf der Klasse nutzst, so dass man das evtl mal nachvollziehen kann?
Wir verwenden die Qt-Version 3.0.5. Der Code zum Aufruf eines File-Dialogs (um eine existierende Bilddatei zu öffnen) sieht folgendermaßen aus: -------------- QFileDialog *dlg = new QFileDialog(mainWindow, "aQFileDialog", true); dlg->setCaption(tr("Open Image...")); dlg->setDir(this->getLastOpenedDir()); dlg->setMode(QFileDialog::ExistingFile); dlg->setFilter("All Files (*.*)"); dlg->addFilter("Image Files (*.tif)"); if (dlg->exec() == QDialog::Accepted) { QString filename = dlg->selectedFile(); this->setLastOpenedDir(filename); delete dlg; loadImageFile(filename); result = true; } else { result = false; delete dlg; } return result; -------------- Die Variable "mainWindow" referenziert das Top-Level-Widget. Das ist eigentlich schon alles. Unter Windows sehe ich dann im "Look in"-Feld lediglich sowas wie A: B: C: D: ... und ggf. noch ein Verzeichnis, in dem ich mit dem Dialog schon mal gewesen bin. Die Laufwerksbezeichnungen fehlen komplett, was für den Benutzer natürlich alles andere als hilfreich ist. Gruß, Alex. -- Alexander Glintschert, MicroDiscovery GmbH Marienburger Strasse 1, D-10405 Berlin, Germany Tel.: +49-(0)30-44350900, Fax: +49-(0)30-443509010 alexander.glintschert@microdiscovery.de http://www.microdiscovery.de
Hallo Frank,
ich habe auch schon krampfhaft gesucht. Und ich habe etwas gefunden: http://arfa.komnas.com/~jeffry_johar/linuxlaht1/t1.html Wenn man es so macht entstehen die Slots in der *.cpp-Datei. Auch eine *.h-Datei ist vorhanden in der die Slots deklariert werden. Nur läßt sich das Programm nicht ohne manuellen Eingriff kompilieren. Das ist eigentlich nicht tragbar. Ich habe mich entschieden die GUI von Hand zu definieren. Aber vielleicht kann mich einer in der Liste eines Besseren belehren. Ich würde mich darüber freuen.
Genau an diese Anleitung hatte ich mich gehalten. Habe sie vor kurzem über die kdevelop Seite gefunden. Genau durch diese Beschreibung ergibt sich ja mein Problem. Könntest Du mir ein HowTo geben wie Du es gemacht hast ?
Ich werde nebenbei mal weitersuchen. Irgendwie muss es ja machbar sein. Ich habe gelesen, das KDevelop 3 demnächst näher mit dem QTDesigner zusammenarbeitet. Da bin ich mal drauf gespannt!
du mußt es genau so machen wie da beschrieben. Dann funktioniert es. Aber es dauert einige Sekunden (evtl. auch 1-2 Minuten) bis die Dateien entstehen (mein Rechner läuft mit 700MHz). Das ganze ist etwas undurchsichtig. Die .h- und .cpp-Dateien werden auch nicht ordentlich ins Projekt eingebunden (so wie sich das gehört). Beachte: So wie die .ui-Datei heißt, so heißen dann auch die .h- und .cpp-Dateien. Wenn du den Designer verläßt und so in KDevelop zurückkehrst entstehen die Dateien noch nicht. Etwas warten, dann Zahnrad drücken, und irgendwann entstehen die beiden Dateien und es gibt eine Fehlermeldung. Oder es entstehen zwei PopUps (Datei von außerhalb verändert) die man mit [Ja]=neu_laden bestätigen muß. Dann die Änderungen machen. Dann sollte es funktionieren. Aber soetwas kann man nicht ernsthaft anwenden. Knöpfe usw. von Hand erzeugen ist da verständlicher und akzeptabler. Schau mal da rein: http://www.hosengummi.de/fuenf_schritte/fuenf_schritte.html Vielleicht sagt dir das zu. Noch etwas: Ich arbeite normalerweise mit Debian woody (KDE 2.2.2). Heute habe ich KDE 3.1 und Designer 3 installiert. Der erste Eindruck ist sehr gut. Wenn du möchtest kann ich dir eine kleine Einführung zukommen lassen (wird morgen oder übermorgen fertig). Gruß Ulrich
On Fri, 07 Mar 2003 at 23:20 (+0100), Ulrich Gehring wrote:
Schau mal da rein: http://www.hosengummi.de/fuenf_schritte/fuenf_schritte.html
Ich habe die URL mal aufgerufen.
#include
Hallo, On Fri, 07 Mar 2003, Bernhard Walle wrote:
On Fri, 07 Mar 2003 at 23:20 (+0100), Ulrich Gehring wrote:
Schau mal da rein: http://www.hosengummi.de/fuenf_schritte/fuenf_schritte.html
Ich habe die URL mal aufgerufen.
#include
int main() { int n; // Deklaration printf("n hat den Wert %i",n); }
a) Dir ist schon klar dass stdio.h nicht C++ ist.
Hoffen wir's! Das ist bis auf den falschen Kommentar ('//') reines C.
b) Wenn Du schon die FUnktion vom Typ `int' ist, dann hat sie gefaelligst einen Integer zurueckzugeben. In Java (z. B.) wuerde sowas ueberhaupt nicht kompiliert werden.
Ack.
c) Gib ein Newline mit aus. Es gibt Shells die ueberschreiben die letzte Zeile (z. B. zsh) und dann sieht man nichts und glaubt irgendwas laeuft schief.
Ack!
d) Ich kann mich auch irren, aber meiner Meinung nach ist `int n' eine Definition, schliesslich wird Speicherplatz reserviert.
Korrekt.
Z. B. [1]. Und `n = 7' ist eine Zuweisung und keine Definition.
Jep.
Das Beispiel muesste also nach ISO C++ so aussehen:
#include <cstdio>
int main (int, char**) { int n; std::printf("n hat den Wert %i\n", n);
*patsch* Wo wird 'n' initialisiert??
return 0; }
Auch nicht gut! ==== #include <iostream> int main(void) { int n = 0; std::cout << "n hat den Wert " << n << std::endl; return 0; } ==== -dnh -- Du vergisst die Kunden, die sich Windows-"Lösungen" andrehen lassen. Die kaufen auch Scheiße in Dosen incl. Wartungsvertrag. -- Holger Marzen
On Sat, 08 Mar 2003 at 00:03 (+0100), David Haller wrote:
On Fri, 07 Mar 2003, Bernhard Walle wrote:
On Fri, 07 Mar 2003 at 23:20 (+0100), Ulrich Gehring wrote:
Schau mal da rein: http://www.hosengummi.de/fuenf_schritte/fuenf_schritte.html
Ich habe die URL mal aufgerufen.
#include
int main() { int n; // Deklaration printf("n hat den Wert %i",n); }
a) Dir ist schon klar dass stdio.h nicht C++ ist.
Hoffen wir's!
Das ist bis auf den falschen Kommentar ('//') reines C.
Nein (also ja). ANSI C 99 erlaubt den Zeilenkommentar. Steht zumindest in C kurz & gut. Aber in dem Beispiel gingt's um QT-Programmierung und daher duerfte der Leser implizit davon ausgehen dass es C++ ist.
Das Beispiel muesste also nach ISO C++ so aussehen:
#include <cstdio>
int main (int, char**) { int n; std::printf("n hat den Wert %i\n", n);
*patsch* Wo wird 'n' initialisiert??
Nirgends. Aber das sollte ja hier gerade gezeigt werden. :-)
==== #include <iostream> int main(void) { int n = 0; std::cout << "n hat den Wert " << n << std::endl; return 0; } ====
So haette ich's auch geschrieben (wenn ich den Artikel geschrieben haette), nur wollte ich halt das Beispiel ANSI/ISO-konform machen ohne die Anweisungen selbst zu aendern. Und zu dem int main(void): ,----[ Msg-ID: aiad4vg2t3qjnmmntoqi7lpmvutf3fgncd@4ax.com ]- | An Holger: für Standard C++ ist 'int main()' nicht zulässig, die einzig | gültige Form ist 'int main(int argc, char **argv)'. Sollte main die | Argumente nicht benötigen, lässt man einfach die Namen weg und | signalisiert dem Compiler so, dass man die Argumente nicht verwendet. `---- Ich glaube hier Philipp Thomas einfach mal. Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former." -- Albert Einstein
Hallo zusammen,
Schau mal da rein: http://www.hosengummi.de/fuenf_schritte/fuenf_schritte.html
Ich habe die URL mal aufgerufen.
#include
int main() { int n; // Deklaration printf("n hat den Wert %i",n); }
a) Dir ist schon klar dass stdio.h nicht C++ ist.
Hoffen wir's! Funktioniert aber; probier es aus :-) ---8<--------------------------------------------
==== #include <iostream> int main(void) { int n = 0; std::cout << "n hat den Wert " << n << std::endl; return 0; } ====
So haette ich's auch geschrieben (wenn ich den Artikel geschrieben haette), nur wollte ich halt das Beispiel ANSI/ISO-konform machen ohne die Anweisungen selbst zu aendern.
Und zu dem int main(void):
,----[ Msg-ID: aiad4vg2t3qjnmmntoqi7lpmvutf3fgncd@4ax.com ]-
| An Holger: für Standard C++ ist 'int main()' nicht zulässig, die einzig | gültige Form ist 'int main(int argc, char **argv)'. Sollte main die | Argumente nicht benötigen, lässt man einfach die Namen weg und | signalisiert dem Compiler so, dass man die Argumente nicht verwendet.
`----
"Mein erstes C++-Programm mit einem GUI und der Entwicklungsumgebung KDevelop" Zu ergänzen ist vielleicht noch: Ein VisualBASIC-verseuchter Mensch sollte durch "übertriebenen" Formalismus _nicht_ abgeschreckt werden. Ein Vorteil akzeptiert jeder, ein Hindernis keiner. http://groups.google.de/groups?q=Deklaration+Definition&hl=de&lr=&ie=UTF-8&selm=7q3flf%24muo%241%40nnrp1.deja.com&rnum=4 | struct foo { | static const int bar = 17; // Deklaration und Initialisierung ...und eine Zuweisung. Jetzt brauchen wir aber eine klare Abgrenzung zwischen: Deklaration, Definition, Initialisierung und Zuweisung. Und, wenn das ganze an einem "nicht_c++-Beispiel" klar gemacht werden kann, dann versteht es auch jeder. Und mit "jeder" meine ich z.B. auch einen 11jährigen interessierten Jungen. So einen habe ich hier sitzen :-) Gruß Ulrich
Happy Weekend
http://groups.google.de/groups?q=Deklaration+Definition&hl=de&lr=&ie=UTF-8&selm=7q3flf%24muo%241%40nnrp1.deja.com&rnum=4 | struct foo { | static const int bar = 17; // Deklaration und Initialisierung ...und eine Zuweisung. Jetzt brauchen wir aber eine klare Abgrenzung zwischen: Deklaration, Definition, Initialisierung und Zuweisung. Und, wenn das ganze an einem "nicht_c++-Beispiel" klar gemacht werden kann, dann versteht es auch jeder. Und mit "jeder" meine ich z.B. auch einen 11jährigen interessierten Jungen. So einen habe ich hier sitzen :-)
Frei nach Stroustrup: Deklaration: Bekannmachung eines Namens und dessen Typs. Defintion: bei Variablen das Anlegen des Objektes (der Ort, an dem der Speicher verbraucht wird), bei Funktionen die Implementierung des Körpers. Ich glaube auch, die Definition muss bei Objekten immer vor der Deklaration kommen. Initialisierung: Die erstmalige Zuweisung eines Wertes. Zuweisung: Uebertragung eines Wertes an ein bereits initialisiertes Objekt. Den Unterschied sieht man bei benutzerdefinierten Objekten in C++ sehr gut, weil hier wirklich unterschiedliche Dinge passieren: // Deklaration, Definition und Initialisierung des Aufrufs des Konstruktors. Klasse k1; // Deklaration und Initialisierung durch Kopieren eines // bestehenden Objektes Klasse k2 = k1; // Zuweisung eines bestehenden Objektes an ein bestehendes k2 = k1; Bye -- | Bodo Kaelberer | http://www.webkind.de/ | http://www.mehr-demokratie-wagen.de/ ---- | Haben oder Nichts sein
Am Samstag, 8. März 2003 02:40 schrieb Bodo Kaelberer: Hallo miteinander...
Frei nach Stroustrup:
Ich denke mal, so ganz liegst du mit deinen Äußerungen nicht richtig:
Deklaration: Bekannmachung eines Namens und dessen Typs.
Genau.
Ich glaube auch, die Definition muss bei Objekten immer vor der Deklaration kommen.
Das kann ja nicht sein: Ohne Deklaration keine Definition. Da du vorwärts deklarieren mußt, ist es also umgekehrt. Warum sollte das bei Objekten anders sein? "Eine Deklaration ist eine Anweisung, die einen Namen in ein Programm einführt." [Stroustrup][2.3.1] und weiter: "Bevor ein Name(Bezeichner) in einem C++-Programm benutzt werden kann, muß er deklariert werden." Aber: "Jede Deklaration, die einen Wert spezifiziert, ist eine Definition." [Stroustrup][4.9] Allerdings ändert das nichts an meiner Aussage.
Den Unterschied sieht man bei benutzerdefinierten Objekten in C++ sehr gut, weil hier wirklich unterschiedliche Dinge passieren:
// Deklaration, Definition und Initialisierung des Aufrufs des Konstruktors. Klasse k1;
Das hier ist "nur" das Erstellen eines neuen Objekts. Dadurch werden zwar die Konstruktoren aufgerufen, aber so werden sie nicht deklariert oder definiert. Richtig ist für die Deklaration: Klasse k1(); Wenn er hier auch definiert sein soll dann heißt es: Klasse k1 () {...}; Ansonsten erfolgt die Definition an anderer Stelle in üblicher Weise: Klasse::Klasse k1() {...;}
// Deklaration und Initialisierung durch Kopieren eines // bestehenden Objektes
Klasse k2 = k1;
Das ist das Kopieren eines Objekts bei der Erstellung eines neuen Objekts. Hier wird zwar der Kopierkonstruktor aufgerufen, aber nicht deklariert oder definiert. Das Kopieren eines bestehenden Objekts bei der Erzeugung eines neuen Objektes ist immer noch eine Konstruktion und findet durch den Kopierkonstruktor statt. Und hier steht das Gleiche wie bei allen anderen, s. o. mit eben dem Unterschied, dass der Kopierkonstruktor anders deklariert wird: Klasse(const Klasse&); Gruss Oliver
On Sat, 08 Mar 2003 at 02:00 (+0100), Ulrich Gehring wrote:
Schau mal da rein: http://www.hosengummi.de/fuenf_schritte/fuenf_schritte.html
Ich habe die URL mal aufgerufen.
#include
int main() { int n; // Deklaration printf("n hat den Wert %i",n); }
a) Dir ist schon klar dass stdio.h nicht C++ ist.
Hoffen wir's! Funktioniert aber; probier es aus :-) ---8<--------------------------------------------
Weiss ich. Um das geht es hier aber nicht. Eine Warnung gibt's auf alle Faelle, wenn man sie aktiviert. Aber sowas tun manche Leute ja nicht ... und wundern sich dann dass ihre Programme instabil werden.
"Mein erstes C++-Programm mit einem GUI und der Entwicklungsumgebung KDevelop" Zu ergänzen ist vielleicht noch: Ein VisualBASIC-verseuchter Mensch sollte durch "übertriebenen" Formalismus _nicht_ abgeschreckt werden.
Ich glaube bei der Einstellung brauchen wir gar nicht weiterzudiskutieren. Visual Basic kenne ich nicht und es interessiert mich auch gar nicht wirklich. Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ "If there's no light at the end of the tunnel, get down there and light the darn thing yourself!" -- Lauri Watts
Hallo zusammen,
Schau mal da rein: http://www.hosengummi.de/fuenf_schritte/fuenf_schritte.html
Ich habe die URL mal aufgerufen.
#include
int main() { int n; // Deklaration printf("n hat den Wert %i",n); }
a) Dir ist schon klar dass stdio.h nicht C++ ist.
Hoffen wir's!
Funktioniert aber; probier es aus :-) ---8<--------------------------------------------
Weiss ich. Um das geht es hier aber nicht. Eine Warnung gibt's auf alle Faelle, wenn man sie aktiviert. Aber sowas tun manche Leute ja nicht ... und wundern sich dann dass ihre Programme instabil werden.
und, wenn man die Warnung beachtet (bzw. bei einer Schulung zeigt) hat man ein tolles Beispiel wie wichtig eine ordentliche Programmierung ist. Und langsam aber sicher wird dann jedem klar, dass der anfängliche Nachtei von C/C++ (laufendes gequengel des Kompilers) sich in einen ungeheuren Vorteil verwandelt.
"Mein erstes C++-Programm mit einem GUI und der Entwicklungsumgebung KDevelop" Zu ergänzen ist vielleicht noch: Ein VisualBASIC-verseuchter Mensch sollte durch "übertriebenen" Formalismus _nicht_ abgeschreckt werden. ---8<--------------------------------
Gruß Ulrich
Ulrich Gehring
Zu ergänzen ist vielleicht noch: Ein VisualBASIC-verseuchter Mensch sollte durch "übertriebenen" Formalismus _nicht_ abgeschreckt werden. Ein Vorteil akzeptiert jeder, ein Hindernis keiner.
Definiere übertrieben. C++ ist nun einmal etwas grundsätzlich Anderes als BASIC und erfordert daher eine andere Vorgehensweise. Gerade wenn man eine neue Programmiersprache lernt sollte man versuchen, korrekt zu programmieren, denn ein einmal angewöhnter 'Schlendrian' lässt sich später nur schwer wieder loswerden. Daher würde ich es mir z.B. zur Regel machen, dass unter C++ ein Kompilieren mit '-W -Wall -Wpointer-arith' (unter C würde ich noch ein -Wno-unused-parameter hinzufügen) ohne Fehler und Warnungen in meinem eigenen Code durchläuft. Philipp -- Philipp Thomas Arbeit: pthomas@suse.de Entwicklung, SuSE Linux AG Privat: pth@t-link.de
Am Samstag, 8. März 2003 02:00 schrieb Ulrich Gehring: Hallo miteinander...
Jetzt brauchen wir aber eine klare Abgrenzung zwischen: Deklaration, Definition, Initialisierung und Zuweisung.
Just for Beginners. Deklaration: Das erste Auftreten eines Namens für eine Funktion die später verwendet wird. Zum Beispiel das Namensschild einer Klingel an der Haus- oder Gartentür. Definition: Die Funktion selbst. Hier wird beschrieben was gemacht werden soll, was passiert und was einen erwartet. Zum Beispiel das Namensschild an der Wohnungstür, das mit dem Namensschild an der Haustür passen muß. Wer ein eigenes Haus hat stellt sich das besser in einem Mehrfamilienhaus vor. ;) Initialisierung: Entweder, wenn ein Element erstellt wird oder wenn ein Element erstellt wird und gleichzeitig einen Wert bekommt: Die Erstellung ohne Wert: string Glas; Hier wird das Glas erstellt, bekommt aber noch nichts zu trinken eingefüllt. Das ist das Gleiche wie int i; Die Erstellung mit wert ist eine Initialisierung mit Zuweisung: string Glas = Milch; Hier bekommt Glas gleich etwas Gesundes zugewiesen. Das ist das Gleiche wie int i = 100; Zuweisung: Bevor etwas zum ersten Mal benutzt werden soll, braucht es einen Wert. Will ich ein Trinkglas zum Trinken benutzen, muß es mit etwas zum Trinken gefüllt werden. So auch Objekte oder Variablen. Sollen sie benutzt werden, müssen sie mit "Inhalt" gefüllt werden: Glas = Milch // Die Milch wird in das Glas gefüllt. int n= 0 // Die 0 wird in die Variable n gefüllt. Und will man mal keine Milch trinken sondern Saft, braucht man eine neue Zuweisung: Glas = Saft; int n = 50; Die Milch, die vorher im Glas war wurde entweder getrunken oder ausgeschüttet und nun wird das Glas mit Saft gefüllt. Ähnlich bei der Variablen. Egal womit sie vorher gefüllt war, jetzt bekommt sie einen Wert 50. Beim Zuweisen liest man immer von rechts nach links. Was rechts vom Zuweisungsoperator "=" steht wird in das was links von ihm steht gefüllt.
Und, wenn das ganze an einem "nicht_c++-Beispiel" klar gemacht werden kann, dann versteht es auch jeder. Und mit "jeder" meine ich z.B. auch einen 11jährigen interessierten Jungen. So einen habe ich hier sitzen :-)
Ich hoffe das war verständlich. Wenn nicht einfach weiter fragen. :) Gruss Oliver
Hallo Oliver, vielen Dank für deine ausführliche Darstellung.
Jetzt brauchen wir aber eine klare Abgrenzung zwischen: Deklaration, Definition, Initialisierung und Zuweisung.
Just for Beginners.
Deklaration: Das erste Auftreten eines Namens für eine Funktion die später verwendet wird. Zum Beispiel das Namensschild einer Klingel an der Haus- oder Gartentür.
Definition: Die Funktion selbst. Hier wird beschrieben was gemacht werden soll, was passiert und was einen erwartet. Zum Beispiel das Namensschild an der Wohnungstür, das mit dem Namensschild an der Haustür passen muß. Wer ein eigenes Haus hat stellt sich das besser in einem Mehrfamilienhaus vor. ;)
Richtig oder falsch? - Deklaration und Definition nicht bei Variablen. - Bei Variablen Initialisierung oder Initialisierung mit Zuweisung.
Initialisierung: Entweder, wenn ein Element erstellt wird oder wenn ein Element erstellt wird und gleichzeitig einen Wert bekommt: Die Erstellung ohne Wert: string Glas;
Hier wird das Glas erstellt, bekommt aber noch nichts zu trinken eingefüllt. Das ist das Gleiche wie int i;
Die Erstellung mit Wert ist eine Initialisierung mit Zuweisung: string Glas = Milch; Hier bekommt Glas gleich etwas Gesundes zugewiesen. Das ist das Gleiche wie int i = 100;
Zuweisung:
Bevor etwas zum ersten Mal benutzt werden soll, braucht es einen Wert. Will ich ein Trinkglas zum Trinken benutzen, muß es mit etwas zum Trinken gefüllt werden. So auch Objekte oder Variablen. Sollen sie benutzt werden, müssen sie mit "Inhalt" gefüllt werden: Glas = Milch // Die Milch wird in das Glas gefüllt. int n= 0 // Die 0 wird in die Variable n gefüllt.
Und will man mal keine Milch trinken sondern Saft, braucht man eine neue Zuweisung: Glas = Saft; int n = 50;
Die Milch, die vorher im Glas war wurde entweder getrunken oder ausgeschüttet und nun wird das Glas mit Saft gefüllt. Ähnlich bei der Variablen. Egal womit sie vorher gefüllt war, jetzt bekommt sie einen Wert 50.
Beim Zuweisen liest man immer von rechts nach links. Was rechts vom Zuweisungsoperator "=" steht wird in das was links von ihm steht gefüllt.
Gruß Ulrich
participants (9)
-
Alexander Glintschert
-
Bernhard Walle
-
Bodo Kaelberer
-
Christoph Renteng
-
David Haller
-
Frank Liebelt
-
Oliver Leue
-
Philipp Thomas
-
Ulrich Gehring