| Autor |
Nachricht |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
19:28:14 27.06.2006 Titel: |
Die meistgestellten Fragen |
Zitieren |
Da im Forum manche Fragen mit einer gewissen Regelmäßigkeit aufkommen, sammle und beantworte ich sie in diesem Thread.
1. Wie kann ich eine richtige Oberfläche programmieren?
2. Wenn ich mein Programm ausführe, passiert gar nichts/flackert nur kurz was auf! Wieso?
3. Ich habe den Code 1:1 aus dem Buch abgeschrieben. Wieso funktioniert der nicht?
4. Ich will mit ganz großen Zahlen rechnen. Wie geht das?
5. Ich hab ein Template. Jetzt bekomm ich aber den Fehler "nicht aufgelöstes externes Symbol". Warum?
6. Ich blicke bei den ganzen Zeichenketten nicht durch. Was soll ich benutzen?
7. Wenn ich Sachen inkludiere, kommen Fehler, in denen "undeclared identifier" oder sowas ähnliches steht. Was tun?
8. Ich will eine Zahl oktal/hexadezimal speichern. Wie geht das?
9. Wieso bekomme ich immer ein "warning: no newline at end of file"?
10. C nicht mit C++ vermischen
11. Was ist der Unterschied zwischen Klassentemplate und Templateklasse?
1. Wie kann ich eine richtige Oberfläche programmieren?
Das Problem bei dieser Frage ist, dass es nicht zu Standard-C++ gehört, GUIs zu programmieren. Da gibt es viele verschiedene Frameworks für. Windows? Da gibt es die WinAPI, aber die ist nicht C++. Die MFC, aber die ist nicht modernes C++ und vor allem nicht kostenfrei. WxWidgets, GTKmm, QT und andere. Linux? Embedded? Es kommt immer darauf an, was man eigentlich will.
Kurzum: Es gibt viele Wege zum Ziel, aber keiner davon führt an den Grundlagen von C++ vorbei. Links gibt es viele, die meisten via Google. In meinen Augen sind die besten Links die Referenzen der o.g. Frameworks, nur dass Referenzen sich am besten lesen, wenn man bereits weiß, was man tut.
Vielen Dank an LordJaxom für diese Antwort.
2. Wenn ich mein Programm ausführe, passiert gar nichts/flackert nur kurz was auf! Wieso?
Schau mal in der Konsolen-FAQ in den Thread Automatisches Schließen verhindern. Desweiteren gibts es (kostenlose) IDEs, die das Problem von selbst lösen. Als Beispiele seien Code::Blocks und Visual C++ 2005 Express Edition genannt.
Eine dritte Methode ist das Erstellen einer Batch-Datei, die das eigentliche Programm aufruft. Das geht unter Windows folgendermaßen:
1. Im Explorer (also der ganz normale Datei-Browser) im Menü auf Extras -> Ordneroptionen.
2. Dann auf "Ansicht" und bei "Erweiterte Einstellungen" den Haken bei "Erweiterung bei bekannten Dateitypen ausblenden" entfernen.
3. OK
4. Datei -> Neu -> Textdokument
5. Einen Namen, der mit ".bat" endet, eingeben, wie z.B. "Starter.bat"
6. Rechtsklick auf die bat-Datei und Bearbeiten auswählen.
7. Im Editor folgendes eingeben:
| Code: | meinprogramm.exe
pause | |
| Code: | meinprogramm.exe
pause | |
| Code: | meinprogramm.exe
pause | |
Für "meinprogramm" den Namen des Programms eingeben.
8. Datei speichern und Editor beenden.
9. Doppelklick auf die bat-Datei und das Programm bleibt danach offen!
Als vierte Möglichkeit sei "Open Command Window Here" aus den Windows XP Powertoys genannt. Mit diesem öffnet man schnell eine Konsole in dem gewünschten Verzeichnis und braucht nur noch den Programmnamen einzugeben. Anders als bei den vorherigen Lösungen beendet sich das eigene Programm zwar, die Ausgabe bleibt aber dennoch sichtbar, da die Konsole ja nicht geschlossen wird.
3. Ich habe den Code 1:1 aus dem Buch abgeschrieben. Wieso funktioniert der nicht?
Viele Bücher halten sich nicht an den C++-Standard. Die neueren Compiler allerdings halten ihn schon ziemlich genau ein. Daher kann es sein, dass dein Buch/Tutorial etwas benutzt, was dein Compiler nicht unterstützt. Typische Beispiele:
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void main() // oder: main()
// ersetzen durch:
int main()
#include <iostream.h>
// ersetzen durch:
#include <iostream>
using namespace std;
#include <stdio.h>
// ersetzen durch:
#include <cstdio>
using namespace std; // analog dazu: assert.h, ctype.h, locale.h, time.h, math.h und weitere | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void main() // oder: main()
// ersetzen durch:
int main()
#include <iostream.h>
// ersetzen durch:
#include <iostream>
using namespace std;
#include <stdio.h>
// ersetzen durch:
#include <cstdio>
using namespace std; // analog dazu: assert.h, ctype.h, locale.h, time.h, math.h und weitere | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void main() // oder: main()
// ersetzen durch:
int main()
#include <iostream.h>
// ersetzen durch:
#include <iostream>
using namespace std;
#include <stdio.h>
// ersetzen durch:
#include <cstdio>
using namespace std; // analog dazu: assert.h, ctype.h, locale.h, time.h, math.h und weitere | |
Wenn man die Zeile "using namespace std;" weglässt, wie man es in Header-Dateien machen sollte, muss man den sog. qualifizierten Namen schreiben, d. h. ein "std::" vor den Namen setzen. Beispiel:
| C/C++ Code: | #include <string>
std::string foo = "bar" | |
| C/C++ Code: | #include <string>
std::string foo = "bar" | |
| C/C++ Code: | #include <string>
std::string foo = "bar" | |
Anmerkung: Die alten Header existieren auch im Standard noch, sie sind allerdings als "deprecated" gekennzeichnet und man darf sich nicht wundern, wenn der Compiler eine entsprechende Warnung ausgibt.
4. Ich will mit ganz großen Zahlen rechnen. Wie geht das?
Oftmals brauchst du gar nicht mit so großen Zahlen zu rechnen (z. B. wenn dich nur das Verhältnis zweier Zahlen interessiert oder alle Zahlen in einem kleinen Bereich liegen) oder hast noch genug andere Probleme, um die du dich eher kümmern solltest als große Zahlen. Wenn du dir dennoch sicher bist, dass du riesige Zahlen brauchst (größer als 2^64 = 18.446.744.073.709.551.616), kannst du das zum Beispiel mit Gnu MP tun.
Frag jetzt nicht, wie man das mit GMP macht. Dafür gibts die Doku!
5. Ich hab ein Template. Jetzt bekomm ich aber den Fehler "nicht aufgelöstes externes Symbol". Warum?
Meistens kommt diese Frage, wenn der Fragesteller das Template aufgeteilt hat, wie er es von Klassen gewohnt ist: Klassendefinition in eine Header-Datei, Memberdefinitionen in eine entsprechende cpp-Datei. Allerdings ist ein Template nur eine Vorlage, die richtigen Klassen/Funktionen erstellt der Compiler erst beim Kompilieren nach dieser Vorlage. Nun ist es wohl klar, dass dem Compiler dafür die gesamte Vorlage zur Verfügung stehen muss. Er sieht aber nur die zu kompilierende Quellcode-Datei inklusive aller eingebundenen Header (man spricht von einer Übersetzungseinheit), die Definitionen der Member werden deshalb nicht gefunden -> nicht aufgelöstes externes Symbol.
Mögliche Workarounds:
- alles direkt in die Klassendefinition einfügen; das wird bei großen Templates ziemlich unübersichtlich
- am Ende der Header-Datei eine Implementationsdatei inkludieren, in der die Member definiert werden (üblicherweise hat diese die Endung .impl)
- die gewünschten Template-Instanzen explizit definieren
- das Schlüsselwort export benutzen; allerdings gibt es kaum Compiler, die dieses unterstützen
6. Ich blicke bei den ganzen Zeichenketten nicht durch. Was soll ich benutzen?
Anfangs wird man meist mit zwei verschiedenen Typen von Zeichenketten konfrontiert: char* mit den entsprechenden Funktionen in <cstring> (bzw. <string.h>), und string aus <string>.
Benutze am besten den string aus <string>. Der andere Typ wird quasi nur noch für Konstanten verwendet. Wenn dir irgendwann mal langweilig ist, kannst du dir auch diesen mal angucken.
Jetzt gibt es allerdings ein Problem: Die Standardbibliothek arbeitet mit (const) char*. Das merkst du zum Beispiel, wenn du eine Datei öffnen willst:
| C/C++ Code: | string name = "test.txt";
ifstream in(name); // Fehler! | |
| C/C++ Code: | string name = "test.txt";
ifstream in(name); // Fehler! | |
| C/C++ Code: | string name = "test.txt";
ifstream in(name); // Fehler! | |
Den String name muss man erst konvertieren, bevor man ihn bei ifstream verwenden kann. Das sieht dann so aus:
| C/C++ Code: | string name = "test.txt";
ifstream in(name.c_str()); | |
| C/C++ Code: | string name = "test.txt";
ifstream in(name.c_str()); | |
| C/C++ Code: | string name = "test.txt";
ifstream in(name.c_str()); | |
Einen guten Artikel über std::string gibt es im Magazin.
7. Wenn ich Sachen inkludiere, kommen Fehler, in denen "undeclared identifier" oder sowas ähnliches steht. Was tun?
Der Inhalt sämtlicher Standard-Headerdateien (s. dazu auch 3.) liegt im Namespace std. Um dem Compiler zu sagen, dass er auch in diesem Namespace nach Namen suchen soll, schreibt man folgende Zeile (üblicherweise unter den #include-Anweisungen):
| C/C++ Code: | | using namespace std; | |
| C/C++ Code: | | using namespace std; | |
| C/C++ Code: | | using namespace std; | |
8. Ich will eine Zahl oktal/hexadezimal speichern. Wie geht das?
Die Fragestellung ist falsch formuliert. Zahlen werden nämlich nicht standardmäßig dezimal gespeichert, sondern dezimal ausgegeben. Intern kann der Computer die Zahlen eh nur binär abspeichern. Also suchst du eine Option, um eine Zahl oktal/hexadezimal auszugeben. Das geht so:
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 | 1 2 3 4 5 6 7 8 9 10 11 | #include <iostream>
using namespace std;
int main()
{
int zahl = 42;
cout << zahl << endl;
cout << hex << zahl << endl;
cout << oct << zahl << endl;
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 | #include <iostream>
using namespace std;
int main()
{
int zahl = 42;
cout << zahl << endl;
cout << hex << zahl << endl;
cout << oct << zahl << endl;
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 | #include <iostream>
using namespace std;
int main()
{
int zahl = 42;
cout << zahl << endl;
cout << hex << zahl << endl;
cout << oct << zahl << endl;
} | |
9. Wieso bekomme ich immer ein "warning: no newline at end of file"?
Dreimal darfst du raten...
Der Standard empfiehlt, dass eine Quellcode-Datei mit einer leeren Zeile abgeschlossen wird. Der Compiler gcc warnt, wenn das nicht der Fall ist.
10. C nicht mit C++ vermischen
(Danke an CodeFinder für diesen Punkt)
Beispiel a) Casts:
| C/C++ Code: | fstream fStr("C:\\demo.dat");
// ...
unsigned long ulNummer;
fStr.read(reinterpret_cast<char*>(&ulNummer), sizeof(unsigned long)); // C++
// und nicht:
// fStr.read((char*)&ulNummer), sizeof(unsigned long)); // C
// ...
| |
| C/C++ Code: | fstream fStr("C:\\demo.dat");
// ...
unsigned long ulNummer;
fStr.read(reinterpret_cast<char*>(&ulNummer), sizeof(unsigned long)); // C++
// und nicht:
// fStr.read((char*)&ulNummer), sizeof(unsigned long)); // C
// ...
| |
| C/C++ Code: | fstream fStr("C:\\demo.dat");
// ...
unsigned long ulNummer;
fStr.read(reinterpret_cast<char*>(&ulNummer), sizeof(unsigned long)); // C++
// und nicht:
// fStr.read((char*)&ulNummer), sizeof(unsigned long)); // C
// ...
| |
Beispiel b) File Handling:
| C/C++ Code: | // Filestreams statt FILE-Structs
fstream fStr(...); // C++
// und nicht:
// FILE *pFile; // C
| |
| C/C++ Code: | // Filestreams statt FILE-Structs
fstream fStr(...); // C++
// und nicht:
// FILE *pFile; // C
| |
| C/C++ Code: | // Filestreams statt FILE-Structs
fstream fStr(...); // C++
// und nicht:
// FILE *pFile; // C
| |
Beispiel c) Speicherreservierung:
| C/C++ Code: | // new statt malloc und Kohorten
Typ* tName= new Typ[Anzahl]; // C++
// und nicht:
// Typ* tName = (Typ*)malloc(Anzahl * sizeof(Typ)); // C
| |
| C/C++ Code: | // new statt malloc und Kohorten
Typ* tName= new Typ[Anzahl]; // C++
// und nicht:
// Typ* tName = (Typ*)malloc(Anzahl * sizeof(Typ)); // C
| |
| C/C++ Code: | // new statt malloc und Kohorten
Typ* tName= new Typ[Anzahl]; // C++
// und nicht:
// Typ* tName = (Typ*)malloc(Anzahl * sizeof(Typ)); // C
| |
11. Was ist der Unterschied zwischen Klassentemplate und Templateklasse?
Wenn man über Templates spricht, ist es manchmal wichtig, eine gemeinsame Terminologie zu haben. Der Ausdruck Klassentemplate beschreibt eine Schablone für eine Familie von Klassen. Templateklasse wird leider auch manchmal als Synonym für Klassentemplate benutzt, bezeichnet aber eigentlich eine Klasse, die aus der Vorlage (dem Template) erzeugt wurde bzw. eine Spezialisierung des Templates.
----------
Anregungen, Kritik und Verbesserungsvorschläge sind erwünscht.
MfG,
Michael E. |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
Zuletzt bearbeitet von Michael E. am 22:15:43 24.06.2008, insgesamt 13-mal bearbeitet |
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1520
|
joomoo Autor
19:37:25 27.06.2006 Titel: |
|
Zitieren |
zu 2.
Würde ich noch hinzufügen:
"Besorg dir einen ordentlichen Compiler, der das automatisch macht!
Visual C++ 6 -> Visual C++ 2005 Express Edition
Dev-C++ -> Code::Blocks"
Ist für Anfänger einfacher. Außerdem funktioniert das in der FAQ mit ignore nicht immer, besser ist mit sync.
mfg. |
|
|
|
 |
.filmor
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.05.2005
Beiträge: 2352
|
.filmor Mitglied
19:43:56 27.06.2006 Titel: |
|
Zitieren |
Ich glaube nicht, dass man Leuten vorschreiben sollte, welchen Compiler (bzw. hier eher welche GUI) sie verwenden. Der erste Fall ist ja noch verständlich (wenn auch die meisten Anfängerfehler _nichts_ damit zu tun haben), aber Dev-C++ und Code::Blocks verwenden schließlich AFAIK beide den gcc.
Ich könnte genauso gut sagen: "Verwendet gefälligst alle Vim, weil ich das auch tue". Keine gute Idee.
@ Michael E.
Prima Sache, danke für die Arbeit. Wenn das Sticky gemacht wird animiert es vielleicht mehr Nutzer sich vorher zu Informieren als die FAQs (die IMHO _sehr_ unübersichtlich sind).
Ich schau mal, ob ich noch mehr immer wiederkehrende Fragen finde.
/edit:
Bei Pkt. 1 fehlt ein 'e'
Punkt 3 solltest du noch mal überarbeiten. Ein Hinweis darauf, dass man using namespace nicht in Headern macht fehlt und | Zitat: | | Als Faustregel gilt, dass aus <xxxxxx.h> ein <cxxxxxx> | stimmt so nicht. Aus iostream.h wurde nicht ciostream, es fehlt der Hinweis darauf, dass die C-Header gemeint sind. Der Teil mit <conio.h> erübrigt sich, wenn der Leser Punkt 2 beherzigt hat. |
Zuletzt bearbeitet von .filmor am 19:50:41 27.06.2006, insgesamt 1-mal bearbeitet |
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1520
|
joomoo Autor
19:50:58 27.06.2006 Titel: |
|
Zitieren |
| .filmor schrieb: | | Ich glaube nicht, dass man Leuten vorschreiben sollte, welchen Compiler (bzw. hier eher welche GUI) sie verwenden. Der erste Fall ist ja noch verständlich (wenn auch die meisten Anfängerfehler _nichts_ damit zu tun haben), aber Dev-C++ und Code::Blocks verwenden schließlich AFAIK beide den gcc. |
Sry, ich meinte IDE. Und bei Dev-C++ zu Code::Blocks ist halt der Vorteil, das Code::Blocks die Konsole nicht automatisch schließt. Ist vielleicht kein großer Vorteil, trotzdem kriegen es viele Einsteiger nicht hin, bei jedem verlassen im Code, das hinzuschreiben. Vor allem wenn sie mehrere returns in main() haben (oder auch irgentwo ein exit(0) eingebaut haben) sind sie schnell frustriert. Bedenke: ->Anfänger<-fragen. Das sind halt meistens Leute mit Visual C++ 6 und Dev-C++. Das finde ich einfach lästig, wenn die dann mit Code ankommen, wo sie das cin.get() falsch postiert haben.
mfg. |
|
|
|
 |
.filmor
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.05.2005
Beiträge: 2352
|
.filmor Mitglied
19:58:57 27.06.2006 Titel: |
|
Zitieren |
@joomoo Hast du da ein Beispiel aus diesem Forum für? Ich denke, ein klein bisschen Denken kann man auch von Anfängern erwarten.
@Michael E.
Grundlagen des Dateihandlings mit fstreams und ein Link auf die stringstream-FAQ wären vielleicht noch angebracht. |
|
|
|
 |
camper
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
|
camper Mitglied
20:04:22 27.06.2006 Titel: |
|
Zitieren |
| .filmor schrieb: | | Zitat: | | Als Faustregel gilt, dass aus <xxxxxx.h> ein <cxxxxxx> | stimmt so nicht. Aus iostream.h wurde nicht ciostream, es fehlt der Hinweis darauf, dass die C-Header gemeint sind. | das schöne an faustregeln: sie können auch mal falsch sein, ohne falsch zu sein er hat den fall ja schließlich auch bereits im code behandelt. ich halte eher die bemerkung über <string.h> und konsorten für ungünstig. esgeht ja nicht darum, welche header verwendet werden, sondern mit welcher art strings man arbeitet. |
|
|
|
 |
LordJaxom
Mitglied
Benutzerprofil
Anmeldungsdatum: 23.11.2005
Beiträge: 5550
|
LordJaxom Mitglied
20:05:57 27.06.2006 Titel: |
|
Zitieren |
Häufig gestellt wird im Moment wohl auch
"Ich habe eine Variable [ersetzbar durch Funktion] in meine .h-Datei geschrieben, und bekomme jetzt immer 'Multiple Definition'-Fehler". Quasi der Komplementärfall zu 5. |
|
|
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1520
|
joomoo Autor
20:07:45 27.06.2006 Titel: |
|
Zitieren |
| .filmor schrieb: | | @joomoo Hast du da ein Beispiel aus diesem Forum für? |
http://www.c-plusplus.de/forum/viewtopic-var-t-is- ....... ays-is-0-and-postorder-is-asc-and-start-is-20.html
gab's noch mehr, nur finde ich jetzt nicht auf die schnelle.
Obwohl ich persönlich nicht zu den Leuten gehöre, höre ich hier des öfteren das Dev-C++ totaler schrott sein soll, deswegen ist es doch nicht schlecht einem Anfänger schon gleich ne ordentlich IDE zu geben, oder?
Ich mein: Was spricht denn dagegen den Visual-C++-6-Leuten den neuen 2005er zu empfehlen? Wird hier sowieso sehr oft getan, dann schreiben wir's dazu, oder?
| Zitat: | | Ich denke, ein klein bisschen Denken kann man auch von Anfängern erwarten. |
Wenn du noch nie programmiert hast, ist es erstmal frustierend, dass du schon drei Zeilen, die du 0 verstehst, an die richtige stelle tun sollst, nur damit ein "Hallo Welt" funktioniert. Außerdem muss man das gleiche ja denn bei nem return in main oder einem exit/abort wieder davor packen.
mfg. |
|
|
|
 |
Tuxinator
Mitglied
Benutzerprofil
Anmeldungsdatum: 24.06.2006
Beiträge: 22
|
Tuxinator Mitglied
20:08:09 27.06.2006 Titel: |
|
Zitieren |
gut, und nun erkläre den anfängern noch klassen und kapselung |
|
|
|
 |
.filmor
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.05.2005
Beiträge: 2352
|
.filmor Mitglied
20:31:49 27.06.2006 Titel: |
|
Zitieren |
Ok, du hast wohl recht.
| joomoo schrieb: | | Obwohl ich persönlich nicht zu den Leuten gehöre, höre ich hier des öfteren das Dev-C++ totaler schrott sein soll, deswegen ist es doch nicht schlecht einem Anfänger schon gleich ne ordentlich IDE zu geben, oder? | Ich hatte mit Dev-C++ nie wirklich Probleme. Wer meint, dass müsse man demjenigen sagen kann das ja tun, wenn der betreffende fragt.
| joomoo schrieb: | | Ich mein: Was spricht denn dagegen den Visual-C++-6-Leuten den neuen 2005er zu empfehlen? Wird hier sowieso sehr oft getan, dann schreiben wir's dazu, oder? | Aber meistens wirds da dazu geschrieben, wo es auch passt, nämlich wenn ein Compilerfehler auftritt, der von dem miesen VC6-Compiler herrührt. Diese Fälle sind aber AFAIK (ich benutze schon immer gcc) nicht das, was einem C++-Anfänger direkt vor der Nase rumspringt. Wenn er bei Metaprogrammierung angekommen ist hat er denke ich genug Verständnis dafür, welchen Compiler er nehmen sollte.
| joomoo schrieb: | | Zitat: | | Ich denke, ein klein bisschen Denken kann man auch von Anfängern erwarten. |
Wenn du noch nie programmiert hast, ist es erstmal frustierend, dass du schon drei Zeilen, die du 0 verstehst, an die richtige stelle tun sollst, nur damit ein "Hallo Welt" funktioniert. Außerdem muss man das gleiche ja denn bei nem return in main oder einem exit/abort wieder davor packen. | Die drei Zeilen werden in dem Artikel aber sinnvoll in eine Funktion gepackt, die dann sehr leicht verständlich ist.
| Tuxinator schrieb: | gut, und nun erkläre den anfängern noch klassen und kapselung  | !(OOP == C++) |
|
|
|
 |
michba
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.08.2005
Beiträge: 575
|
michba Mitglied
20:32:31 27.06.2006 Titel: |
|
Zitieren |
Vielleicht noch "Einmal Zahl nach String und zurück" (http://www.c-plusplus.de/forum/viewtopic-var-t-is-39488.html).
Steht zwar in den FAQs auf der ersten Seite, es kommen aber trotzdem regelmäßig Fragen zu dem Thema.
Manchmal frage ich mich, ob überhaupt jemand in die FAQs schaut...
| .filmor schrieb: | | Ich denke, ein klein bisschen Denken kann man auch von Anfängern erwarten. |
|
_________________ Re|kur|si|on, die: → Rekursion
|
|
 |
Tuxinator
Mitglied
Benutzerprofil
Anmeldungsdatum: 24.06.2006
Beiträge: 22
|
Tuxinator Mitglied
20:38:34 27.06.2006 Titel: |
|
Zitieren |
es geht hier um c++,gell?
| Zitat: |
Vergiss es. Solange du die Grundlagen nicht kannst (und zu den Grundlagen gehört mehr als schon mal ne Klasse erstellt zu haben!), hat es keinen Sinn, sich mit Oberflächen zu beschäftigen. | |
|
|
|
 |
...
Unregistrierter
|
... Unregistrierter
20:48:17 27.06.2006 Titel: |
|
Zitieren |
| Tuxinator schrieb: | es geht hier um c++,gell?
| Zitat: |
Vergiss es. Solange du die Grundlagen nicht kannst (und zu den Grundlagen gehört mehr als schon mal ne Klasse erstellt zu haben!), hat es keinen Sinn, sich mit Oberflächen zu beschäftigen. |
|
Ja genau, und deshalb sind Klassen fundamental, also überdenke deinen Beitrag besser nochmal. |
|
|
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
20:50:43 27.06.2006 Titel: |
|
Zitieren |
| Tuxinator schrieb: | es geht hier um c++,gell?
| Zitat: |
Vergiss es. Solange du die Grundlagen nicht kannst (und zu den Grundlagen gehört mehr als schon mal ne Klasse erstellt zu haben!), hat es keinen Sinn, sich mit Oberflächen zu beschäftigen. |
|
Jap.
Ich guck mal, was ich noch hinzufüge/entferne. Mein Ziel ist es nämlich nicht, eine große Sammlung zu erstellen, in dem möglichst viele häufig gestellte Fragen beantwortet werden (dafür sind schließlich die FAQ da), sondern einen kleinen Text zu schreiben, der wenn möglich nur das Wichtigste enthält.
Alle Änderungen nehm ich im OP vor. |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
GPC
Moderator
Benutzerprofil
Anmeldungsdatum: 11.07.2004
Beiträge: 6290
|
GPC Moderator
20:56:20 27.06.2006 Titel: |
|
Zitieren |
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1520
|
joomoo Autor
21:12:05 27.06.2006 Titel: |
|
Zitieren |
| .filmor schrieb: | | Die drei Zeilen werden in dem Artikel aber sinnvoll in eine Funktion gepackt, die dann sehr leicht verständlich ist. |
Was wenn der Anfänger noch nicht (eigene) Funktionen gehabt hat? Ich seh hier meistens nur Leute die cin.get() und system("PAUSE") benutzen, und das wahrscheinlich auch deswegen, weil ihnen der Code aus der FAQ nicht ganz klar wird. Die Funktion wait() muss ja noch in der main-Funktion aufgerufen werden (und zwar vor return, wer noch keine Funktionen hat, weiß das vielleicht auch nicht).
Auch finde ich es total lästig, immer ein wait() an allen meinen programm-abbrüchen einzufügen. Und bei einem assert oder /0 bringst ja dann sowieso nichts mehr.
Deswegen: Was spricht denn dagegen? Man könnte diese IDE-Tipps ja nur als Empfehlung hinschreiben und nichts als zwingende Aufforderung.
mfg. |
|
|
|
 |
LordJaxom
Mitglied
Benutzerprofil
Anmeldungsdatum: 23.11.2005
Beiträge: 5550
|
LordJaxom Mitglied
21:22:25 27.06.2006 Titel: |
|
Zitieren |
Zu Punkt 6: IMHO müsste es heissen "Die Standardbibliothek arbeitet mit const char*", jedenfalls in dem Zusammenhang. |
Zuletzt bearbeitet von LordJaxom am 21:22:41 27.06.2006, insgesamt 1-mal bearbeitet |
|
 |
chrische5
Mitglied
Benutzerprofil
Anmeldungsdatum: 23.05.2005
Beiträge: 5010
|
chrische5 Mitglied
08:35:20 28.06.2006 Titel: |
Re: Die meistgestellten Fragen |
Zitieren |
Hallo
| Michael E. schrieb: |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void main()
// ersetzen durch:
int main()
#include <iostream.h>
// ersetzen durch:
#include <iostream>
using namespace std; // analog dazu: <string.h> -> <string>
#include <stdio.h>
// ersetzen durch:
#include <cstdio>
using namespace std; // analog dazu: assert.h, ctype.h, locale.h, time.h, math.h und weitere | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void main()
// ersetzen durch:
int main()
#include <iostream.h>
// ersetzen durch:
#include <iostream>
using namespace std; // analog dazu: <string.h> -> <string>
#include <stdio.h>
// ersetzen durch:
#include <cstdio>
using namespace std; // analog dazu: assert.h, ctype.h, locale.h, time.h, math.h und weitere | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void main()
// ersetzen durch:
int main()
#include <iostream.h>
// ersetzen durch:
#include <iostream>
using namespace std; // analog dazu: <string.h> -> <string>
#include <stdio.h>
// ersetzen durch:
#include <cstdio>
using namespace std; // analog dazu: assert.h, ctype.h, locale.h, time.h, math.h und weitere | |
|
<string.h> wird doch aber nicht zu <string>, sondern zu <cstring>.
chrische |
_________________ "Mach mal einem Bekloppten klar, dass er bekloppt ist." Dieter Bohlen
|
|
 |
Swordfish
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 2805
|
Swordfish Mitglied
10:11:11 28.06.2006 Titel: |
|
Zitieren |
Hm, ich würd's sinnvoller finden (wegen redundanz u. übersichtlichkeit), wen man im C++-Froum soetwas wie einen "Indexthread" zum FAQ sticky macht in welchem man für bestimmte Probleme auf den/die passende(n) FAQ Threads verweist. Dann würde man sich nämlich die Posts sparen, in denen wieder 'mal jemand meint, er habe in der FAQ gesucht und gesucht und doch nix gefunden (obwohl der Rest der Welt weiß, daß dort steht was er sucht).
Greetz, Swordfish
@chrische: mein ich auch!! |
_________________ Thou shall not fflush stdin!
Thou shall not cast void pointers! And therefore
Thou shall not cast the result of malloc!
|
|
 |
camper
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
|
camper Mitglied
15:40:26 28.06.2006 Titel: |
|
Zitieren |
| Swordfish schrieb: | Hm, ich würd's sinnvoller finden (wegen redundanz u. übersichtlichkeit), wen man im C++-Froum soetwas wie einen "Indexthread" zum FAQ sticky macht in welchem man für bestimmte Probleme auf den/die passende(n) FAQ Threads verweist. Dann würde man sich nämlich die Posts sparen, in denen wieder 'mal jemand meint, er habe in der FAQ gesucht und gesucht und doch nix gefunden (obwohl der Rest der Welt weiß, daß dort steht was er sucht).
Greetz, Swordfish
@chrische: mein ich auch!! | stiime zu. man kann ja abwägen: wenn die frage in einer zeile zu beantworten ist, kann man sie hier beantworten, sonst nimmt man einen link. |
|
|
|
 |
CodeFinder
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.06.2006
Beiträge: 3093
|
CodeFinder Mitglied
15:52:12 28.06.2006 Titel: |
|
Zitieren |
Hab noch ne Idee bzgl. des eigentlichen Themas, dieses Threads:
8. C nicht mit C++ vermischen:
Beispiel a) Casts:
| C/C++ Code: | fstream fStr("C:\\demo.dat");
// ...
unsigned long ulNummer;
fStr.read(reinterpret_cast<char*>(&ulNummer), sizeof(unsigned long)); // C++
// und nicht:
// fStr.read((char*)&ulNummer), sizeof(unsigned long)); // C
// ...
| |
| C/C++ Code: | fstream fStr("C:\\demo.dat");
// ...
unsigned long ulNummer;
fStr.read(reinterpret_cast<char*>(&ulNummer), sizeof(unsigned long)); // C++
// und nicht:
// fStr.read((char*)&ulNummer), sizeof(unsigned long)); // C
// ...
| |
| C/C++ Code: | fstream fStr("C:\\demo.dat");
// ...
unsigned long ulNummer;
fStr.read(reinterpret_cast<char*>(&ulNummer), sizeof(unsigned long)); // C++
// und nicht:
// fStr.read((char*)&ulNummer), sizeof(unsigned long)); // C
// ...
| |
Beispiel b) File Handling:
| C/C++ Code: | // Filestreams statt FILE-Structs
fstream fStr(...); // C++
// und nicht:
// FILE *pFile; // C
| |
| C/C++ Code: | // Filestreams statt FILE-Structs
fstream fStr(...); // C++
// und nicht:
// FILE *pFile; // C
| |
| C/C++ Code: | // Filestreams statt FILE-Structs
fstream fStr(...); // C++
// und nicht:
// FILE *pFile; // C
| |
Beispiel c) Speicherreservierung:
| C/C++ Code: | // new statt malloc und Kohorten
Typ* tName= new Typ[Anzahl]; // C++
// und nicht:
// Typ* tName = (Typ*)malloc(Anzahl * sizeof(Typ)); // C
| |
| C/C++ Code: | // new statt malloc und Kohorten
Typ* tName= new Typ[Anzahl]; // C++
// und nicht:
// Typ* tName = (Typ*)malloc(Anzahl * sizeof(Typ)); // C
| |
| C/C++ Code: | // new statt malloc und Kohorten
Typ* tName= new Typ[Anzahl]; // C++
// und nicht:
// Typ* tName = (Typ*)malloc(Anzahl * sizeof(Typ)); // C
| |
oder findet ihrs nit so wichtig...? -> Feedback please
Edit: @camper, gute Idee! ...bzgl. der Ptr is mir nur nix anderes eingefallen |
_________________ MfG CodeFinder
Einfach nur heiß : Riff Raff ... If You Want Blood (You've Got It)! - That's Rock 'N Roll!.
Zuletzt bearbeitet von CodeFinder am 16:52:53 28.06.2006, insgesamt 2-mal bearbeitet |
|
 |
camper
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
|
camper Mitglied
15:59:32 28.06.2006 Titel: |
|
Zitieren |
| CodeFinder schrieb: | Hab noch ne Idee bzgl. des eigentlichen Themas, dieses Threads:
8. C nicht mit C++ vermischen:
Beispiel a) Casts:
| C/C++ Code: | int i;
long l = 2344234;
i = static_cast<int>(l); // C++
// und nicht:
// i = (int)l; // C
| |
| C/C++ Code: | int i;
long l = 2344234;
i = static_cast<int>(l); // C++
// und nicht:
// i = (int)l; // C
| |
| C/C++ Code: | int i;
long l = 2344234;
i = static_cast<int>(l); // C++
// und nicht:
// i = (int)l; // C
| |
Beispiel b) File Handling:
| C/C++ Code: | // Filestreams statt FILE-Structs
fstream fStr(...); // C++
// und nicht:
// FILE *pFile; // C
| |
| C/C++ Code: | // Filestreams statt FILE-Structs
fstream fStr(...); // C++
// und nicht:
// FILE *pFile; // C
| |
| C/C++ Code: | // Filestreams statt FILE-Structs
fstream fStr(...); // C++
// und nicht:
// FILE *pFile; // C
| |
oder findet ihrs nit so wichtig...? -> Feedback please  | gute idee. dann darf auch malloc(und konsorten)->new nicht fehlen.
edit: bei den C-casts besser ein weniger kontroverses beispiel (also irgendwas was leicht ins auge geht, am besten mit pointern) wählen. |
Zuletzt bearbeitet von camper am 16:01:49 28.06.2006, insgesamt 1-mal bearbeitet |
|
 |
CodeFinder
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.06.2006
Beiträge: 3093
|
CodeFinder Mitglied
16:26:57 28.06.2006 Titel: |
|
Zitieren |
|
 |
camper
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
|
camper Mitglied
16:30:50 28.06.2006 Titel: |
|
Zitieren |
jo, ist ok. da kannst du bei dem beispiel ja gleich punkt a) und b) zusammenführen oder gleich alle 3
edit: übrigens: | Code: | | Typ* tName = (Typ*)malloc(Anzahl*sizeof(Typ)); | |
| Code: | | Typ* tName = (Typ*)malloc(Anzahl*sizeof(Typ)); | |
| Code: | | Typ* tName = (Typ*)malloc(Anzahl*sizeof(Typ)); | |
was gleich als eine begründung herhalten kann |
Zuletzt bearbeitet von camper am 16:31:57 28.06.2006, insgesamt 1-mal bearbeitet |
|
 |
CodeFinder
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.06.2006
Beiträge: 3093
|
CodeFinder Mitglied
16:49:36 28.06.2006 Titel: |
|
Zitieren |
| camper schrieb: |
edit: übrigens: | Code: | | Typ* tName = (Typ*)malloc(Anzahl*sizeof(Typ)); | |
| Code: | | Typ* tName = (Typ*)malloc(Anzahl*sizeof(Typ)); | |
| Code: | | Typ* tName = (Typ*)malloc(Anzahl*sizeof(Typ)); | |
was gleich als eine begründung herhalten kann  |
Hähä^^, jo stimmt |
_________________ MfG CodeFinder
Einfach nur heiß : Riff Raff ... If You Want Blood (You've Got It)! - That's Rock 'N Roll!.
|
|
 |
camper
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
|
camper Mitglied
17:45:06 29.06.2006 Titel: |
|
Zitieren |
frage an die moderatoren: besteht eine chance, diesen tread sticky zu machen, oder soller in der versenkung verschwinden? |
|
|
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
18:35:11 29.06.2006 Titel: |
|
Zitieren |
Ich bin dafür, dass noch en bisschen gesammelt/überarbeitet wird und schließlich alles in einem Post zusammengefasst wird. |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
HumeSikkins
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.08.2000
Beiträge: 11139
|
HumeSikkins Mitglied
18:52:43 29.06.2006 Titel: |
|
Zitieren |
| camper schrieb: | | frage an die moderatoren: besteht eine chance, diesen tread sticky zu machen, oder soller in der versenkung verschwinden? |
Imo wird er so oder so in der Versenkung verschwinden. Entweder im wörtlichen Sinne, oder er wird, so wie die FAQs, schlicht ignoriert.
Aber versuchen wir es...
| Zitat: | | Ich bin dafür, dass noch en bisschen gesammelt/überarbeitet wird und schließlich alles in einem Post zusammengefasst wird. |
Ich pinne den Thread jetzt erstmal fest, dass macht das Sammeln leichter. Eine spätere Zusammenfassung scheint mir aber ebenfalls sinnvoll zu sein. |
_________________ Remember Sturgeon's Law:
"Ninety percent of everything is crap."
and now go visit my Homepage ;-)
|
|
 |
camper
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
|
camper Mitglied
19:20:28 29.06.2006 Titel: |
|
Zitieren |
| HumeSikkins schrieb: | | camper schrieb: | | frage an die moderatoren: besteht eine chance, diesen tread sticky zu machen, oder soller in der versenkung verschwinden? |
Imo wird er so oder so in der Versenkung verschwinden. Entweder im wörtlichen Sinne, oder er wird, so wie die FAQs, schlicht ignoriert. | das bestimmt. aber ein sticky ist leichter wiederzufinden, wenn man einen link posten will, weil mal wieder ignoriert wurde
ob hier irgendwann ein neuere thread gebraucht wird ist nicht so klar. ein einfaches updaten des originalen beitrags sollte doch genügen. die thematik selbst ist ja auch nicht in sich abgeschlossen. |
Zuletzt bearbeitet von camper am 19:22:16 29.06.2006, insgesamt 1-mal bearbeitet |
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
20:52:39 29.06.2006 Titel: |
|
Zitieren |
Was haltet ihr von der jetzigen Version?
BTW: Zahl-String-Konvertierungen will ich nicht reinnehmen, weil mir das in letzter Zeit nicht aufgefallen ist und der Text jetzt schon groß genug ist. |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
.filmor
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.05.2005
Beiträge: 2352
|
.filmor Mitglied
21:49:17 29.06.2006 Titel: |
|
Zitieren |
Mir fehlt immer noch der Hinweis, dass using namespace im Header böse ist. Den "void main" Teil könntest du noch mit dem einfachen "main" erweitern, das kommt auch häufiger vor.
| Michael E. schrieb: | | Zahl-String-Konvertierungen will ich nicht reinnehmen, weil mir das in letzter Zeit nicht aufgefallen ist und der Text jetzt schon groß genug ist. | Es reicht ein Link auf den FAQ-Beitrag. Das kommt immernoch viel zu häufig vor. Du könntest das unter Punkt 10 setzen, atoi wird auch viel zu häufig verwendet (ist ja afaik nicht mal C).
Bei Punkt 9 fehlt der [b]-Tag am Anfang |
|
|
|
 |
Swordfish
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 2805
|
Swordfish Mitglied
22:20:20 29.06.2006 Titel: |
|
Zitieren |
@.filmor: doch:
| ISO/IEC 9899:TC2 schrieb: | 7.20.1.2 The atoi, atol, and atoll functions
Synopsis
1 #include <stdlib.h>
int atoi(const char *nptr);
long int atol(const char *nptr);
long long int atoll(const char *nptr);
|
Greetz, Swordfish |
_________________ Thou shall not fflush stdin!
Thou shall not cast void pointers! And therefore
Thou shall not cast the result of malloc!
|
|
 |
.filmor
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.05.2005
Beiträge: 2352
|
.filmor Mitglied
22:26:49 29.06.2006 Titel: |
|
Zitieren |
Dann hab ichs mit itoa verwechselt, sorry. Trotzdem gehört beides nicht in ein C++-Programm. |
|
|
|
 |
Swordfish
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 2805
|
Swordfish Mitglied
23:23:34 29.06.2006 Titel: |
|
Zitieren |
Tjo
Greetz, Swordfish |
_________________ Thou shall not fflush stdin!
Thou shall not cast void pointers! And therefore
Thou shall not cast the result of malloc!
|
|
 |
HumeSikkins
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.08.2000
Beiträge: 11139
|
HumeSikkins Mitglied
10:05:40 30.06.2006 Titel: |
|
Zitieren |
| .filmor schrieb: | | Dann hab ichs mit itoa verwechselt, sorry. Trotzdem gehört beides nicht in ein C++-Programm. |
Bitte nicht persönlichen Stil mit generellen Regeln/Empfehlungen verwechseln. atoi hat seine Nachteile (z.B. keine gute Fehlerkontrolle), aber wenn man diese kennt und damit leben kann, sehe ich absolut nichts, was gegen die Verwendung von atoi spricht. |
_________________ Remember Sturgeon's Law:
"Ninety percent of everything is crap."
and now go visit my Homepage ;-)
|
|
 |
.filmor
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.05.2005
Beiträge: 2352
|
.filmor Mitglied
13:34:48 02.07.2006 Titel: |
|
Zitieren |
Gut, es ließe sich sicherlich etwas vorsichtiger formulieren, aber vorher wird darauf hingewiesen, dass man am besten std::string benutzen sollte und für diesen sind Stringstreams angebrachter. |
|
|
|
 |
Artchi
Autor
Benutzerprofil
Anmeldungsdatum: 16.03.2002
Beiträge: 8571
|
Artchi Autor
10:24:35 09.07.2006 Titel: |
|
Zitieren |
Warum steht in Punkt drei nicht drin, das man bitte das Buch/Tutorial weg schmeissen soll??? Die nächsten Kapitel werden bestimmt auch nicht besser sein. |
_________________ Bring back the Windows Start Menu Petition | GoPetition
Zuletzt bearbeitet von Artchi am 10:25:58 09.07.2006, insgesamt 2-mal bearbeitet |
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
16:03:51 09.07.2006 Titel: |
|
Zitieren |
Ist das wirklich immer so? |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
ja
Unregistrierter
|
ja Unregistrierter
16:06:26 09.07.2006 Titel: |
|
Zitieren |
Solche Bücher lehren wahscheinlich auch dementsprechend schlechten, unmodernen C++ Stil. |
|
|
|
 |
Artchi
Autor
Benutzerprofil
Anmeldungsdatum: 16.03.2002
Beiträge: 8571
|
Artchi Autor
18:39:06 09.07.2006 Titel: |
|
Zitieren |
Also, wenn das HelloWorld schon nicht ISO-konform ist, warum sollten die nachfolgenden Kapitel über strings, filestreams usw. ISO-konform sein?
Es ist wahrscheinlich, das das Buch noch vor 1998 geschrieben wurde oder wenn es aktueller ist, der Autor irgendwie die C++-Welt und alles andere verpennt hat. Egal wie, das Buch/Tutorial werden dem C++-Greenhorn der etwas lernen will, nicht groß behilflich sein. |
_________________ Bring back the Windows Start Menu Petition | GoPetition
|
|
 |
Lohminio
Mitglied
Benutzerprofil
Anmeldungsdatum: 13.09.2006
Beiträge: 5
|
Lohminio Mitglied
10:21:21 26.10.2006 Titel: |
danke |
Zitieren |
thx für die beantwortung der fragen hat mir auch geholfen |
|
|
|
 |
Jacks Rache
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.10.2006
Beiträge: 15
|
Jacks Rache Mitglied
16:41:12 28.10.2006 Titel: |
|
Zitieren |
| Zitat: |
1. Wie kann ich eine richtige Oberfläche programmieren?
Vergiss es. Solange du die Grundlagen nicht kannst (und zu den Grundlagen gehört mehr als schon mal ne Klasse erstellt zu haben!), hat es keinen Sinn, sich mit Oberflächen zu beschäftigen.
|
Ich finde diese Antwort beleidigend. Ich suche schon seit längerer Zeit ein Tutorial, um eine Benutzeroberfläche zu programmieren - ohne Erfolg. Anstatt Anfängern vorzuschreiben, wie sie C++ lernen sollen, sollte als Antwort besser etwas Konstruktives stehen (z.B. ein guter Link). |
|
|
|
 |
Artchi
Autor
Benutzerprofil
Anmeldungsdatum: 16.03.2002
Beiträge: 8571
|
Artchi Autor
17:57:41 28.10.2006 Titel: |
|
Zitieren |
Finde die Antwort auch nicht glücklich, es bedürfte wohl einer ausgeweiteten Begründung. Das stimmt.
Zu dem Tutorial: da es keine Standard-GUI in C++ gibt, kann man dir schlecht ebendmal ein Tutorial empfehlen. Wir haben ein GUI-Forum hier, da kannst du dich umschauen in der FAQ und in alten Beiträgen stöbern, dann weißt du wo du Tutorials findest. Und vorallem: dann verstehst du auch die Antwort von da oben. Ansonst ist auch meine Übersicht (siehe meine Signatur) ganz hilfreich? |
_________________ Bring back the Windows Start Menu Petition | GoPetition
Zuletzt bearbeitet von Artchi am 17:59:30 28.10.2006, insgesamt 1-mal bearbeitet |
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
18:59:12 28.10.2006 Titel: |
|
Zitieren |
Die Antwort ist keineswegs beleidigend gemeint!
Hat jemand Lust, das besser zu formulieren, bevor ich mit meinem C++-Gui-Halbwissen rauskomme? |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
Jacks Rache
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.10.2006
Beiträge: 15
|
Jacks Rache Mitglied
19:28:44 28.10.2006 Titel: |
|
Zitieren |
| Michael E. schrieb: | Die Antwort ist keineswegs beleidigend gemeint!
Hat jemand Lust, das besser zu formulieren, bevor ich mit meinem C++-Gui-Halbwissen rauskomme? |
Wie gesagt: Noch besser als eine andere Formulierung wäre natürlich ein nützlicher Link. Oder steht wirklich nirgends beschrieben, wie man so etwas programmiert? Aber danke schon mal dafür, dass meine Kritik nicht auf taube Ohren gestoßen ist. |
|
|
|
 |
LordJaxom
Mitglied
Benutzerprofil
Anmeldungsdatum: 23.11.2005
Beiträge: 5550
|
LordJaxom Mitglied
00:23:14 29.10.2006 Titel: |
|
Zitieren |
| Jacks Rache schrieb: | | Wie gesagt: Noch besser als eine andere Formulierung wäre natürlich ein nützlicher Link. Oder steht wirklich nirgends beschrieben, wie man so etwas programmiert? Aber danke schon mal dafür, dass meine Kritik nicht auf taube Ohren gestoßen ist. |
Ein nützlicher Link? Das Problem bei dieser Frage ist IMHO dass es wie gesagt nicht zu Standard-C++ gehört, GUIs zu programmieren. Da gibt es viele verschiedene Frameworks für. Windows? Da gibt es die WinAPI, aber die ist nicht C++. Die MFC, aber die ist nicht modernes C++ und vor allem nicht kostenfrei. WxWidgets, GTKmm, QT und andere. Linux? Embedded? Es kommt immer darauf an was man eigentlich will.
Kurzum: Es gibt viele Wege zum Ziel, aber keiner davon führt an den Grundlagen vorbei. Links gibt es viele, die meisten via Google. In meinen Augen sind die besten Links die Referenzen der o.g. Frameworks, nur dass Referenzen sich am besten lesen wenn man bereits weiss was man tut. Beleidigend ist diese Antwort damit aber auf keinen Fall. |
|
|
|
 |
Artchi
Autor
Benutzerprofil
Anmeldungsdatum: 16.03.2002
Beiträge: 8571
|
Artchi Autor
00:26:05 29.10.2006 Titel: |
|
Zitieren |
@Jacks Rache! Hast du mein Posting nicht richtig gelesen? Dann würdest du nicht wiederholt nach einem Tutorial-Link nachfragen. LordJaxom hat versucht es zu formulieren, was ich durch verweise auf ein Unterforum versucht habe zu sagen. |
_________________ Bring back the Windows Start Menu Petition | GoPetition
|
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
11:11:53 29.10.2006 Titel: |
|
Zitieren |
LordJaxom: Darf ich das so übernehmen? |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
LordJaxom
Mitglied
Benutzerprofil
Anmeldungsdatum: 23.11.2005
Beiträge: 5550
|
LordJaxom Mitglied
00:51:30 30.10.2006 Titel: |
|
Zitieren |
@Michael E.: Jederzeit |
|
|
|
 |
tipp
Unregistrierter
|
tipp Unregistrierter
19:08:59 09.11.2006 Titel: |
|
Zitieren |
Ich fände es gut, wenn in Punkt zwei noch folgende Methode erwähnt würde:
Man kann eine Batch-Datei erstellen, die nachdem Programm die Konsole offen hält.
Einfach eine Batch-Datei im Ordner erstellen wo auch das programm liegt. Das geht unter Windows XP so:
1. Im Explorer (also der ganz normale Datei-Browser) im Menü auf Extras -> Ordneroptionen.
2. Dann auf "Ansicht" und bei "Erweiterte Einstellungen" den Haken bei "Erweiterung bei bekannten Dateitypen ausblenden" entfernen.
3. OK
4. Datei -> Neu -> Textdokument
5. Einen Namen der mit .bat aufhört eingeben wie z.B. "Starter.bat"
6. Rechtsklick auf die bat-Datei und Bearbeiten auswählen.
7. Im Editor folgendes eingeben:
| Code: | meinprogramm.exe
pause | |
| Code: | meinprogramm.exe
pause | |
| Code: | meinprogramm.exe
pause | |
Für meinprogramm den Namen eures Programms eingeben.
8. Datei speichern und Editor beenden.
9. Doppelklick auf die bat-Datei und euer Programm bleibt danach offen!
Diese Methode finde ich viel besser da man nicht die IDE wechseln muss und auch keine Änderungen im Code machen muss. Allerdings funktioniert sie nur unter Windows, das haben allerdings die meisten Anfänger. |
|
|
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
22:15:43 09.11.2006 Titel: |
|
Zitieren |
Added. |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
CStoll
Moderator
Benutzerprofil
Anmeldungsdatum: 17.10.2005
Beiträge: 17913
|
CStoll Moderator
09:29:21 10.11.2006 Titel: |
|
Zitieren |
Zu Punkt 6 könntest du eventuell noch einen Link auf meinen Strings-Artikel einfügen * (und wenn du Tip 3 beachtest, solltest du zumindest <cstring> erwähnen.
Nochmal zu Tip 3: Die "alten" C-Header <stdio.h> etc existieren im C++ Standard übrigens weiterhin - parallel zu den C++ Wrapper-Headern <cstdio> etc.
(*)Die Adresse findest du hinter dem Link da unten ↓ |
_________________ Wo ich bin, herrscht Chaos. Leider kann ich nicht überall sein.
Moderator im MFC- und C++-Board und Magazin-Autor
|
|
 |
volkard
Moderator
Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24318
|
volkard Moderator
09:52:26 10.11.2006 Titel: |
|
Zitieren |
ich las gerade
| C/C++ Code: | fStr.read(reinterpret_cast<char*>(&ulNummer), sizeof(unsigned long)); // C++
// und nicht:
// fStr.read((char*)&ulNummer), sizeof(unsigned long)); // C | |
| C/C++ Code: | fStr.read(reinterpret_cast<char*>(&ulNummer), sizeof(unsigned long)); // C++
// und nicht:
// fStr.read((char*)&ulNummer), sizeof(unsigned long)); // C | |
| C/C++ Code: | fStr.read(reinterpret_cast<char*>(&ulNummer), sizeof(unsigned long)); // C++
// und nicht:
// fStr.read((char*)&ulNummer), sizeof(unsigned long)); // C | |
warum sollte das so sein?
abgesehen von
| C/C++ Code: | | fStr.read((char*)&ulNummer, sizeof(ulNummer)); | |
| C/C++ Code: | | fStr.read((char*)&ulNummer, sizeof(ulNummer)); | |
| C/C++ Code: | | fStr.read((char*)&ulNummer, sizeof(ulNummer)); | |
, denn man will den typ ja auch mal ändern dürfen.
es wäre viel besser, wenn es auch begründungen zu den vorschlägen geben würde. dann kann man sich die tipps besser merken. dann kann man auch besser dran glauben und es ist nicht der tausendste style-guide. |
_________________ http://www.venganza.info/
plonk fürs Forum v1.02
Zuletzt bearbeitet von volkard am 09:57:56 10.11.2006, insgesamt 3-mal bearbeitet |
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
15:42:34 10.11.2006 Titel: |
|
Zitieren |
| CStoll schrieb: | | Zu Punkt 6 könntest du eventuell noch einen Link auf meinen Strings-Artikel einfügen |
Done. Danke für den Hinweis.
| Zitat: | | und wenn du Tip 3 beachtest, solltest du zumindest <cstring> erwähnen. |
Was meinst du?
| Zitat: | | Nochmal zu Tip 3: Die "alten" C-Header <stdio.h> etc existieren im C++ Standard übrigens weiterhin - parallel zu den C++ Wrapper-Headern <cstdio> etc. |
Ergänzt. |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
CodeFinder
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.06.2006
Beiträge: 3093
|
CodeFinder Mitglied
15:44:16 10.11.2006 Titel: |
|
Zitieren |
| volkard schrieb: | | man auch besser dran glauben und es ist nicht der tausendste style-guide. | Hast du was gegen (guten) Coding-Style ? Daraus resultiert in der Regel nämlich eine bessere Lesbarkeit des Quellcodes . |
_________________ MfG CodeFinder
Einfach nur heiß : Riff Raff ... If You Want Blood (You've Got It)! - That's Rock 'N Roll!.
|
|
 |
CStoll
Moderator
Benutzerprofil
Anmeldungsdatum: 17.10.2005
Beiträge: 17913
|
CStoll Moderator
15:47:13 10.11.2006 Titel: |
|
Zitieren |
| Michael E. schrieb: | | Zitat: | | und wenn du Tip 3 beachtest, solltest du zumindest <cstring> erwähnen. |
Was meinst du?
| Auf der einen Seite erklärst du, daß die C-Header (dazu gehört auch <string.h> - die moderne Version ist <cstring>) veraltet sind, auf der anderen Seite verwendest du diesen veralteten Header zur Gegenüberstellung gegen <string>. |
_________________ Wo ich bin, herrscht Chaos. Leider kann ich nicht überall sein.
Moderator im MFC- und C++-Board und Magazin-Autor
|
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
11:27:41 11.11.2006 Titel: |
|
Zitieren |
CStoll: Geändert.
volkard: Hab dich nicht vergessen, werd heut Abend ne Begründung schreiben. |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
virtuell Realisticer
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.05.2000
Beiträge: 3460
|
virtuell Realisticer Mitglied
12:12:53 13.11.2006 Titel: |
|
Zitieren |
| CodeFinder schrieb: | | volkard schrieb: | | man auch besser dran glauben und es ist nicht der tausendste style-guide. | Hast du was gegen (guten) Coding-Style ? Daraus resultiert in der Regel nämlich eine bessere Lesbarkeit des Quellcodes . |
Definiere "guten Coding-Style". IMHO koennte es sich herausstellen, dass es
sich dabei um geschmackssache handelt.
gruss
v R |
_________________ virtuell Realisticer, innen gut, aussen besser
|
|
 |
volkard
Moderator
Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24318
|
volkard Moderator
13:42:44 13.11.2006 Titel: |
|
Zitieren |
| CodeFinder schrieb: | | volkard schrieb: | | man auch besser dran glauben und es ist nicht der tausendste style-guide. | Hast du was gegen (guten) Coding-Style ? Daraus resultiert in der Regel nämlich eine bessere Lesbarkeit des Quellcodes . |
was ist "gut"? letztendlich doch etwas, was den code gut macht.
da gibt es aber so viele falsche profeten, daß einem ganz schlecht wird.
deswegen lehne ich jeden style-guide ab, in dem nicht jede regel verständlich begründet wird.
normalerweise isses aber zig-mal besser, den hackern einfach "effektiv c++ programmieren" zu kaufen. einsicht statt unverstandene (und zum großen teil schlechte) regeln brint's. |
_________________ http://www.venganza.info/
plonk fürs Forum v1.02
|
|
 |
THX 1138
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.03.2006
Beiträge: 2327
|
THX 1138 Mitglied
14:24:42 13.11.2006 Titel: |
|
Zitieren |
| volkard schrieb: | | da gibt es aber so viele falsche profeten, daß einem ganz schlecht wird. | Da wird mir schlecht, neue Rechtschreibung hin oder her, Profet sieht einfach grauslig aus. (Sry OT)
MMn sollte man keine C-Style Casts verwenden, nicht nur aus styling Gründen. |
_________________ Tretet für die Gerechtigkeit ein, wenn ihr vor Gott Zeugnis ablegt, und sei es gegen euch selber oder euere Eltern und Verwandten. Handele es sich um arm oder reich, Gott steht euch näher als beide.
(Sure an-Nisa, 135)
|
|
 |
SideWinder
Moderator
Benutzerprofil
Anmeldungsdatum: 19.10.2001
Beiträge: 18218
|
SideWinder Moderator
14:38:17 13.11.2006 Titel: |
|
Zitieren |
| Artchi schrieb: | Also, wenn das HelloWorld schon nicht ISO-konform ist, warum sollten die nachfolgenden Kapitel über strings, filestreams usw. ISO-konform sein?
Es ist wahrscheinlich, das das Buch noch vor 1998 geschrieben wurde oder wenn es aktueller ist, der Autor irgendwie die C++-Welt und alles andere verpennt hat. Egal wie, das Buch/Tutorial werden dem C++-Greenhorn der etwas lernen will, nicht groß behilflich sein. |
ISO-konform != gut. Man kann C++ auch sehr gut lehren ohne vollständig ISO-konform zu sein (siehe volkards C++-Kurs)
MfG SideWinder |
_________________ http://www.dilbert.com/2009-06-11/
http://www.dilbert.com/2009-06-14/
|
|
 |
virtuell Realisticer
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.05.2000
Beiträge: 3460
|
virtuell Realisticer Mitglied
16:25:21 13.11.2006 Titel: |
|
Zitieren |
| THX 1138 schrieb: | | volkard schrieb: | | da gibt es aber so viele falsche profeten, daß einem ganz schlecht wird. | Da wird mir schlecht, neue Rechtschreibung hin oder her, Profet sieht einfach grauslig aus. (Sry OT)
|
Gut das wir es jetzt wissen...
| Zitat: |
MMn sollte man keine C-Style Casts verwenden, nicht nur aus styling Gründen. |
Das ist immer noch keine Begruendung.
gruss
v R |
_________________ virtuell Realisticer, innen gut, aussen besser
|
|
 |
daktari
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.01.2007
Beiträge: 1
|
daktari Mitglied
14:57:00 21.01.2007 Titel: |
Wie kann dieser Code kompakter geschrieben werden? |
Zitieren |
Hallo liebe Foren Mitglieder,
bei F0 bis F14 handelt es sich um eine int Variable.
Bei LTB handelt es sich um ein Label. Dieses Label befindet sich auf einer anderen Form.
Hat jemand eine Idee, wie dieser Code kompakter mit einer Schleife und einer Laufvariablen für F und LTB geschrieben werden kann?
Vielen Dank für eure Hilfe.
Borland C++ Builder 5
int F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14;
F0 = StrToInt(Form1->LTB0 ->Caption);
F1 = StrToInt(Form1->LTB1 ->Caption);
F2 = StrToInt(Form1->LTB2 ->Caption);
F3 = StrToInt(Form1->LTB3 ->Caption);
F4 = StrToInt(Form1->LTB4 ->Caption);
F5 = StrToInt(Form1->LTB5 ->Caption);
F6 = StrToInt(Form1->LTB6 ->Caption);
F7 = StrToInt(Form1->LTB7 ->Caption);
F8 = StrToInt(Form1->LTB8 ->Caption);
F9 = StrToInt(Form1->LTB9 ->Caption);
F10 = StrToInt(Form1->LTB10->Caption);
F11 = StrToInt(Form1->LTB11->Caption);
F12 = StrToInt(Form1->LTB12->Caption);
F13 = StrToInt(Form1->LTB13->Caption);
F14 = StrToInt(Form1->LTB14->Caption); |
|
|
|
 |
chrische5
Mitglied
Benutzerprofil
Anmeldungsdatum: 23.05.2005
Beiträge: 5010
|
chrische5 Mitglied
17:23:16 21.01.2007 Titel: |
|
Zitieren |
Hallo
Falscher Thread und falsches Forum. Sonst arrays oder besser vector.
chrische |
_________________ "Mach mal einem Bekloppten klar, dass er bekloppt ist." Dieter Bohlen
|
|
 |
yanke23
Unregistrierter
|
yanke23 Unregistrierter
11:49:29 26.01.2007 Titel: |
ich habe mal eine frage |
Zitieren |
was kann man mit static_cast<int>(x) machen und wie funktioniert das kann mir das villeicht irgendjemand erklären das wäre sau nett
schon mal danke im voraus |
|
|
|
 |
akari
Moderator
Benutzerprofil
Anmeldungsdatum: 27.11.2004
Beiträge: 11271
|
akari Moderator
11:57:02 26.01.2007 Titel: |
|
Zitieren |
Hallo
@ daktari : Siehe die FAQ des Borland Builder Subforums. Dort gibt es einen Abschnitt "Komponenten benutzen", der genau das erklärt.
@ yanke23 : Siehe hier.
bis bald
akari |
_________________ In der nächsten Version wird alles besser!
|
|
 |
CStoll
Moderator
Benutzerprofil
Anmeldungsdatum: 17.10.2005
Beiträge: 17913
|
CStoll Moderator
11:57:54 26.01.2007 Titel: |
|
Zitieren |
Kurz: Du kannst einen Wert umwandeln in eine Ganzzahl.
Lang: In C++ gibt es ein ganzes Sortiment von Cast-Operatoren (Typumwandlung):
- static_cast<T>(x) - explizite Typumwandlung
- dynamic_cast<T>(x) - Downcasts für polymorphe Typen (Pointer oder Referenzen)
- const_cast<T>(x) - um die const'nes von Objekten zu entfernen
(da solltest du besser dreimal nachdenken, bevor du es verwendest)
- reinterpret_cast<T>(x) - Uminterpretation auf Bit-Ebene
- (T)x oder T(x) - C-Stil Cast bzw. Funktion-Stil Cast
(können je nach Situation static_cast, const_cast oder reinterpret_cast darstellen) Wie genau der Compiler das umsetzt, hängt von den verwendeten Datentypen ab. Aber in der Regel wird er eine passende Typumwandlung suchen, mit der er dein x als int-Wert lesen kann (was das ist, hängt im wesentlichen davon ab, wie x definiert ist).
PS: Bei Fragen darfst du gerne einen eigenen Beitrag eröffnen. |
_________________ Wo ich bin, herrscht Chaos. Leider kann ich nicht überall sein.
Moderator im MFC- und C++-Board und Magazin-Autor
|
|
 |
yanke23
Unregistrierter
|
yanke23 Unregistrierter
12:03:05 26.01.2007 Titel: |
noch mal |
Zitieren |
also ich kann auch eine dezimal zahl in den ascii code umwandeln also das geht aber wie macht der befehl das |
|
|
|
 |
CStoll
Moderator
Benutzerprofil
Anmeldungsdatum: 17.10.2005
Beiträge: 17913
|
CStoll Moderator
12:08:23 26.01.2007 Titel: |
Re: noch mal |
Zitieren |
| yanke23 schrieb: | | also ich kann auch eine dezimal zahl in den ascii code umwandeln also das geht aber wie macht der befehl das | char ist auch nur ein Ganzzahltyp, mit dem C++ problemlos rechnen kann. Der Trick dabei ist, daß die Ein-/Ausgabe einen char als ASCII-Zeichen darstellen kann. |
_________________ Wo ich bin, herrscht Chaos. Leider kann ich nicht überall sein.
Moderator im MFC- und C++-Board und Magazin-Autor
|
|
 |
raubritter
Mitglied
Benutzerprofil
Anmeldungsdatum: 31.01.2007
Beiträge: 117
|
raubritter Mitglied
17:28:44 01.02.2007 Titel: |
|
Zitieren |
Mal etwas zu dem ersten Punkt gesagt: Ich finde es garnicht so schwer eine richtige Oberfläche zu programmieren. Dies ist mein 3 Tag, in dem ich mich mit C/C++ beschäfftige und ich habe es geschafft eine Oberfläche zu erstellen. Gut, ich weis noch nicht, was z.B.
wcx.cbClsExtra = 0;
heißt. Aber was bringt mir das. Ich kann meine Oberfläche mit meinem Quelltext in größe, aussehen und Beschriftung ändern. Und das reicht mir. Mein Informatiklehrer hat mir einmal gesagt: man muss nicht alles Programmieren können. Man muss nur wissen wo es steht!
Ich finde diesen Spruch wirklich richtig. (bei z.B. Microsoft Words muss man doch auch nicht wissen, wie man einen zeilenvorschub hinbekommt, wenn man das erste mal mit ihm umgeht. Es reicht voll und ganz ein programm aufrufen zu können etwas reinzuschreiben und es zu speichern. Wenn man später etwas braucht kann man es dann natürlich noch suchen! Eine richtige Arbeitserleichterung! |
|
|
|
 |
joomoo
Autor
Benutzerprofil
Anmeldungsdatum: 31.07.2004
Beiträge: 1520
|
joomoo Autor
23:27:55 01.02.2007 Titel: |
|
Zitieren |
| raubritter schrieb: | Mal etwas zu dem ersten Punkt gesagt: Ich finde es garnicht so schwer eine richtige Oberfläche zu programmieren. Dies ist mein 3 Tag, in dem ich mich mit C/C++ beschäfftige und ich habe es geschafft eine Oberfläche zu erstellen. Gut, ich weis noch nicht, was z.B.
wcx.cbClsExtra = 0;
heißt. Aber was bringt mir das. Ich kann meine Oberfläche mit meinem Quelltext in größe, aussehen und Beschriftung ändern. Und das reicht mir. Mein Informatiklehrer hat mir einmal gesagt: man muss nicht alles Programmieren können. Man muss nur wissen wo es steht!
Ich finde diesen Spruch wirklich richtig. (bei z.B. Microsoft Words muss man doch auch nicht wissen, wie man einen zeilenvorschub hinbekommt, wenn man das erste mal mit ihm umgeht. Es reicht voll und ganz ein programm aufrufen zu können etwas reinzuschreiben und es zu speichern. Wenn man später etwas braucht kann man es dann natürlich noch suchen! Eine richtige Arbeitserleichterung! |
Vielleicht kannst du eine Oberfläche erstellen, aber es birgt drei Nachteile:
1.) Du benutzt WinAPI. Das ist C und plattformabhängig.
2.) Früher oder später werden deine Programme einfach so abstürzen. Und du wirst nicht wissen warum, glaub mir.
3.) Wir sollen dir dann dabei helfen
mfg. |
|
|
|
 |
JayB
Unregistrierter
|
JayB Unregistrierter
16:43:31 20.02.2007 Titel: |
Objektinspektor |
Zitieren |
hat jemand so ne art erklärung des objektinspektors...?
also wo kurz aufgeführt ist was bei welcher einstellung passiert |
|
|
|
 |
LordJaxom
Mitglied
Benutzerprofil
Anmeldungsdatum: 23.11.2005
Beiträge: 5550
|
LordJaxom Mitglied
17:05:42 20.02.2007 Titel: |
|
Zitieren |
1. Was ist "der Objektinspektor"?
2. Wieso ist das eine meistgestellte Frage? |
|
|
|
 |
Braunstein
Mitglied
Benutzerprofil
Anmeldungsdatum: 16.05.2002
Beiträge: 6734
|
Braunstein Mitglied
17:09:05 20.02.2007 Titel: |
|
Zitieren |
1. Ich kenn sowas beim BCB (würde dann ins BCB-Forum gehören)
2. Das ist keine solche
Vielleicht könnte ein Mod diese Frage mal abtrennen. |
|
|
|
 |
akari
Moderator
Benutzerprofil
Anmeldungsdatum: 27.11.2004
Beiträge: 11271
|
akari Moderator
17:10:25 20.02.2007 Titel: |
|
Zitieren |
Hallo
Objektinspektor ist ein Teil des Borland Builders, und damit hat die Frage hier nichts zu suchen. Das gehört ins Builder-Forum.
Die Eigenschaften die dort angezeigt werden sind kontextabhängig, und zwar vom ausgewähltem Komponententyp. Und eine detaillierte Dokumentation der Komponententypen findest du in der Builder-Hilfe : F1 drücken.
bis bald
akari |
_________________ In der nächsten Version wird alles besser!
|
|
 |
camper
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
|
camper Mitglied
10:03:06 11.04.2007 Titel: |
|
Zitieren |
Vorschlag für einen weiteren Eintrag: zum Unterschied zwischen Klassentemplate und Templateklasse bzw. Funktionstemplate und Templatefunktion. |
|
|
|
 |
Michael E.
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5296
|
Michael E. Mitglied
10:15:40 11.04.2007 Titel: |
|
Zitieren |
Meinst du, das wird häufig benötigt? Wenn ja, dann kann ich ja mal den entsprechenden Abschnitt aus "C++ Templates" zu Hause zusammenfassen. |
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
|
|
 |
valaBoo
Mitglied
Benutzerprofil
Anmeldungsdatum: 12.08.2007
Beiträge: 2
|
valaBoo Mitglied
15:55:48 12.08.2007 Titel: |
|
Zitieren |
| akari schrieb: | Hallo
Objektinspektor ist ein Teil des Borland Builders, und damit hat die Frage hier nichts zu suchen. Das gehört ins Builder-Forum.
Die Eigenschaften die dort angezeigt werden sind kontextabhängig, und zwar vom ausgewähltem Komponententyp. Und eine detaillierte Dokumentation der Komponententypen findest du in der Builder-Hilfe : F1 drücken.
bis bald
akari |
Ah super danke, genau das wollte ich auch wissen.
:live:Außerdem echt super Forum! also hilfreich.
Wenn jemand will, kann er auch diesen: ***zensiert*** Link anklicken, damit tut ihr mir einen großen Gefallen, und lernt evtll. noch ein super Browsergame kennen.
(Nur so nebenbei, also wer drauf klicken will dann klickne )
Ich werd noch weiterhin hier durchstöbern, da hier wirklich gute Sachen zu finden sind!
MfG
valaBoo |
Zuletzt bearbeitet von CStoll am 08:47:44 13.08.2007, insgesamt 2-mal bearbeitet |
|
 |
The-Kenny
Mitglied
Benutzerprofil
Anmeldungsdatum: 03.03.2007
Beiträge: 876
|
The-Kenny Mitglied
16:03:49 12.08.2007 Titel: |
|
Zitieren |
|
 |
CStoll
Moderator
Benutzerprofil
Anmeldungsdatum: 17.10.2005
Beiträge: 17913
|
CStoll Moderator
08:48:18 13.08.2007 Titel: |
|
Zitieren |
| The-Kenny schrieb: | Kann ein Mod bitte den Link dort zensieren?  | Wenn du so freundlich bittest, aber immer doch |
_________________ Wo ich bin, herrscht Chaos. Leider kann ich nicht überall sein.
Moderator im MFC- und C++-Board und Magazin-Autor
|
|
 |
asdasdasd
Unregistrierter
|
asdasdasd Unregistrierter
18:19:22 29.05.2008 Titel: |
|
Zitieren |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | int cgls ( Sparse_Matrix &A , const Vektor &b , Vektor &x0 , int k_max , double &eps )
{
if(A.Zeilen() < A.Spalten())
{
cerr << "Ungültige Matrix für cgls, Zeilen < Spalten" << endl;
return 0;
}
Vektor r(b - A*x);
Vektor s(r*A);
Vektor d(s);
double alpha, beta, norm_s;
int k = 0;
while(++k < k_max && s.Norm2() < eps)
{
alpha = s.Norm2()*s.Norm2()/((A*d).Norm2()*(A*d).Norm2());
x0 += alpha * d;
r -= alpha * (A*d);
norm_s = s.Norm2();
s = r*A;
beta = s.Norm2()*s.Norm2()/(norm_s*norm_s)
d = s + beta*d;
}
eps = s.Norm2();
return k;
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | int cgls ( Sparse_Matrix &A , const Vektor &b , Vektor &x0 , int k_max , double &eps )
{
if(A.Zeilen() < A.Spalten())
{
cerr << "Ungültige Matrix für cgls, Zeilen < Spalten" << endl;
return 0;
}
Vektor r(b - A*x);
Vektor s(r*A);
Vektor d(s);
double alpha, beta, norm_s;
int k = 0;
while(++k < k_max && s.Norm2() < eps)
{
alpha = s.Norm2()*s.Norm2()/((A*d).Norm2()*(A*d).Norm2());
x0 += alpha * d;
r -= alpha * (A*d);
norm_s = s.Norm2();
s = r*A;
beta = s.Norm2()*s.Norm2()/(norm_s*norm_s)
d = s + beta*d;
}
eps = s.Norm2();
return k;
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | int cgls ( Sparse_Matrix &A , const Vektor &b , Vektor &x0 , int k_max , double &eps )
{
if(A.Zeilen() < A.Spalten())
{
cerr << "Ungültige Matrix für cgls, Zeilen < Spalten" << endl;
return 0;
}
Vektor r(b - A*x);
Vektor s(r*A);
Vektor d(s);
double alpha, beta, norm_s;
int k = 0;
while(++k < k_max && s.Norm2() < eps)
{
alpha = s.Norm2()*s.Norm2()/((A*d).Norm2()*(A*d).Norm2());
x0 += alpha * d;
r -= alpha * (A*d);
norm_s = s.Norm2();
s = r*A;
beta = s.Norm2()*s.Norm2()/(norm_s*norm_s)
d = s + beta*d;
}
eps = s.Norm2();
return k;
} | |
// Edit: Code tags hinzugefügt |
Zuletzt bearbeitet von evilissimo am 16:32:48 27.09.2008, insgesamt 1-mal bearbeitet |
|
 |
Tobi3000
Mitglied
Benutzerprofil
Anmeldungsdatum: 14.07.2006
Beiträge: 209
|
Tobi3000 Mitglied
15:28:18 27.09.2008 Titel: |
|
Zitieren |
Warum werden bei manchen Funktionsaufrufen '::' benutzt und an anderen stellen benutzt man '.' oder '->'? |
|
|
|
 |
Swordfish
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 2805
|
Swordfish Mitglied
16:23:03 27.09.2008 Titel: |
|
Zitieren |
Das sind dann keine Funktionsaufrufe, sondern Methodeaufrufe.
Bei statischen Methoden musst Du nur den Scope angeben:
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 | 1 2 3 4 5 6 7 8 9 10 | class foo_t {
public:
static void bar( ) { };
};
int main( ) {
foo_t::bar( );
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 | class foo_t {
public:
static void bar( ) { };
};
int main( ) {
foo_t::bar( );
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 | class foo_t {
public:
static void bar( ) { };
};
int main( ) {
foo_t::bar( );
} | |
für andere benötigst du ein Objekt:
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 | 1 2 3 4 5 6 7 8 9 10 11 12 | class foo_t {
public:
void bar( ) { };
};
int main( ) {
foo_t a_foo;
a_foo.bar( );
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 | class foo_t {
public:
void bar( ) { };
};
int main( ) {
foo_t a_foo;
a_foo.bar( );
} | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 | class foo_t {
public:
void bar( ) { };
};
int main( ) {
foo_t a_foo;
a_foo.bar( );
} | |
cheers, Swordfish |
_________________ Thou shall not fflush stdin!
Thou shall not cast void pointers! And therefore
Thou shall not cast the result of malloc!
|
|
 |
camper
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
|
camper Mitglied
14:21:53 29.09.2008 Titel: |
|
Zitieren |
| Swordfish schrieb: | | Das sind dann keine Funktionsaufrufe, sondern Methodeaufrufe. | Das solltest du besser zurücknehmen. Der Begriff "Methode" hat in C++ keine formale Bedeutung, dort gibt es nur Funktionen. Welche Arten davon (hier: Memberfunktionen) jeweils als Methode bezeichnet werden, ist kontextabhängig. |
|
|
|
 |
asc
Mitglied
Benutzerprofil
Anmeldungsdatum: 13.01.2007
Beiträge: 5268
|
asc Mitglied
14:56:24 29.09.2008 Titel: |
|
Zitieren |
| camper schrieb: | | Swordfish schrieb: | | Das sind dann keine Funktionsaufrufe, sondern Methodeaufrufe. | Das solltest du besser zurücknehmen. Der Begriff "Methode" hat in C++ keine formale Bedeutung, dort gibt es nur Funktionen. Welche Arten davon (hier: Memberfunktionen) jeweils als Methode bezeichnet werden, ist kontextabhängig. |
Auch wenn du recht hast das es keine standisierte Bedeutung hat, ist diese Verwendung von Funktion/Methode doch sehr verbreitet. Also als falsch würde ich die Aussage von Swordfish auch nicht hinstellen, auch wenn es nicht überall so verwendet wird (Wobei ich es aus den bisherigen Firmen auch nur in dieser Art kenne, und es auch in OO-Büchern eine recht verbreitete Bezeichnung ist [gehe hier mal von ca. 80%+ aus]).
cu André |
_________________ in theory there's no difference between theory and practice. in practice there is. (yogi berra)
In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
|
|
 |
camper
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
|
camper Mitglied
18:50:06 29.09.2008 Titel: |
|
Zitieren |
| asc schrieb: | | camper schrieb: | | Swordfish schrieb: | | Das sind dann keine Funktionsaufrufe, sondern Methodeaufrufe. | Das solltest du besser zurücknehmen. Der Begriff "Methode" hat in C++ keine formale Bedeutung, dort gibt es nur Funktionen. Welche Arten davon (hier: Memberfunktionen) jeweils als Methode bezeichnet werden, ist kontextabhängig. |
Auch wenn du recht hast das es keine standisierte Bedeutung hat, ist diese Verwendung von Funktion/Methode doch sehr verbreitet. Also als falsch würde ich die Aussage von Swordfish auch nicht hinstellen, auch wenn es nicht überall so verwendet wird (Wobei ich es aus den bisherigen Firmen auch nur in dieser Art kenne, und es auch in OO-Büchern eine recht verbreitete Bezeichnung ist [gehe hier mal von ca. 80%+ aus]).
cu André | Die Wahrheit oder Unwahrheit einer Behauptung ist nicht davon abhängig, wieviele Personen diese verbreiten (dass ich das überhaupt sagen muss, betrachte ich als Zumutung). In C++ ist jeder Methodenaufruf (egal, welche übliche Verwendung wir nutzen) ein Funktionsaufruf, weil jede Methode eine Funktion ist. Mithin ist Swordfishs Aussage falsch, ohne wenn und aber. Es spielt auch keine Rolle, wie verständlich es ist, das dieser Fehler gemacht wurde - das kann schon gar kein Kriterium sein in einem Thread wie diesem, der immer wieder gelesen werden wird. |
|
|
|
 |
Swordfish
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 2805
|
Swordfish Mitglied
18:26:52 30.09.2008 Titel: |
|
Zitieren |
Sorry. Ich meinte den aus der OOP - als Konzept - bekannten Begriff der Methode ... nicht wirklich passend auf die gestellte Frage hin.
Natürlich ist es - auf C++ bezogen - eine Memberfunktion.
cheers, Swordfish |
_________________ Thou shall not fflush stdin!
Thou shall not cast void pointers! And therefore
Thou shall not cast the result of malloc!
Zuletzt bearbeitet von Swordfish am 18:28:16 30.09.2008, insgesamt 1-mal bearbeitet |
|
 |