PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einstiegshürden bei C++ und verschiedene Dialekte


Danielo
2013-08-01, 23:42:08
Hallo,

eigentlich wollte ich ja die Grundlagen zu Objective-C lernen, um dann in Xcode für den Mac entsprechende Applikationen zu erstellen, aber in Ermangelung einer vernünftigen Lektüre, habe ich dann mit C++ vorlieb genommen, weil ich bereits ein Buch darüber besitze. Leider ist mein Buch von 1999 und vieles natürlich nicht mehr zeitgemäß. Auch ist C++ ja nicht zu 100% mit Objective-C kompatibel und mein Compiler/bzw. meine IDE (Borland C++ Builder) ist auch ziemlich veraltet, aber für einfache Anwendungen und zum Lernen der Grundlagen sollte das ja nicht so schlimm sein.

Gegenwärtig bastel ich an einem Ratespiel und versuche, es noch besser zu machen. Das denkt sich eine Zahl aus und in einem Eingabefeld kann man dann seine Vermutung abgeben, worauf es einem mitteilt, ob die eingegebene Zahl größer oder kleiner ist, oder genau auf die Zahl zutrifft, die vorher generiert wurde. Dazu hat man 10 Versuche. Danach wird eine neue Zahl generiert und der Versuchszähler zurückgestellt. Allerdings funktioniert die Rückgabe der vorher generierten Zahl nicht, die ich nach dem letzten Versuch anzeigen wollte. Die Zufallszahl ist ein integer-Wert und soll in einer MessageBox ausgegeben werden. Ich habe versucht, die Zahl in einen String zu konvertieren, was aber nicht geht und die MessageBox gibt mir sonst nur wirre Zeichen wieder, wenn ich versuche die integer-Variable via + anzuhängen.

Gibt es eigentlich für C++ noch andere Dialekte und was sollte man als Neuling noch beachten? Dummerweise hat Visual Studio Express für C++ Mätzchen gemacht, weswegen ich auf den alten C++ Builder zurückgefallen bin.

Danke für eure Hilfe! :)

Gruß,
Danielo

Marscel
2013-08-02, 01:48:30
Du schreibst vielleicht unschuldig, wenn man sich überlegt, worum es da geht...

a) Was für Vorerfahrung hast du mit Programmiersprachen und b) was willst du wirklich machen?

eigentlich wollte ich ja die Grundlagen zu Objective-C lernen, um dann in Xcode für den Mac entsprechende Applikationen zu erstellen, aber in Ermangelung einer vernünftigen Lektüre, habe ich dann mit C++ vorlieb genommen, weil ich bereits ein Buch darüber besitze.

Es gibt seit dem App-Hype etliche englische und deutsche Bücher, die sich mit OC umfassend beschäftigen.

Leider ist mein Buch von 1999 und vieles natürlich nicht mehr zeitgemäß.

Besorg dir was aktuelles. Das wird dir sicher hier und da etwas zeigen, wie man es heute dank drei neuerer Standards nicht mehr macht. Und wenn da was von "<iostream.h>" auftaucht, tu es weg.

Auch ist C++ ja nicht zu 100% mit Objective-C kompatibel

Nicht zu 100%? Die entstammen beide C, aber das wars.

und mein Compiler/bzw. meine IDE (Borland C++ Builder) ist auch ziemlich veraltet, aber für einfache Anwendungen und zum Lernen der Grundlagen sollte das ja nicht so schlimm sein.

Gilt dasselbe wie für das Buch.

Ich habe versucht, die Zahl in einen String zu konvertieren, was aber nicht geht und die MessageBox gibt mir sonst nur wirre Zeichen wieder, wenn ich versuche die integer-Variable via + anzuhängen.

WinAPI, C++ und Casts. :ulol: Seriously, wenn du nicht als erste Programmiererfahrung in C++ alle Tiefen ergründen willst, warum das nicht geht und wie man es macht, nimm C#. Oder beschränke dich auf Standard-I/O. Oder nimm Qt oder so etwas.

Gibt es eigentlich für C++ noch andere Dialekte

Es gibt eine handvoll Standards. Und selbst ein einziger davon kann dich Jahre beschäftigen.

und was sollte man als Neuling noch beachten?

Sei stark, wenn du in Tränen ausbrichst: ist Ok, hab immer ausreichend Aspirin da.

Dummerweise hat Visual Studio Express für C++ Mätzchen gemacht, weswegen ich auf den alten C++ Builder zurückgefallen bin.

Gewöhn dich dran. In all den Jahren mit etlichen Compilern, Plattformen und Build-Environments hat eher selten mal auf Anhieb etwas reibungslos funktioniert. Kümmer dich drum, meistens ist es für den Programmieralltag sogar recht lehrreich, wenn man es hinbekommen hat.

Nakai
2013-08-02, 16:22:26
Guck dich mal nach C++11 um. Das ist der neueste Standard und schließt von der Funktionalität zu Java/C# ziemlich beachtlich auf.
Nun gibts endlich RangedBasedLoops, auto-Type, Smart-Pointer...etc

https://en.wikipedia.org/wiki/C%2B%2B11

Ahja nicht jeder Compiler unterstützt es.


Gegenwärtig bastel ich an einem Ratespiel und versuche, es noch besser zu machen. Das denkt sich eine Zahl aus und in einem Eingabefeld kann man dann seine Vermutung abgeben, worauf es einem mitteilt, ob die eingegebene Zahl größer oder kleiner ist, oder genau auf die Zahl zutrifft, die vorher generiert wurde. Dazu hat man 10 Versuche. Danach wird eine neue Zahl generiert und der Versuchszähler zurückgestellt. Allerdings funktioniert die Rückgabe der vorher generierten Zahl nicht, die ich nach dem letzten Versuch anzeigen wollte. Die Zufallszahl ist ein integer-Wert und soll in einer MessageBox ausgegeben werden. Ich habe versucht, die Zahl in einen String zu konvertieren, was aber nicht geht und die MessageBox gibt mir sonst nur wirre Zeichen wieder, wenn ich versuche die integer-Variable via + anzuhängen.


Ohne Code, kann man dir schlecht helfen. Aber hilft das:
std::ostringstream bla;
int zahl = 50;
bla << zahl;
std::cout << bla.str().c_str() << std::endl; //str().c_str() gibt const char * zurück, also 50 als String aus

Ansonsten schreib dir mal selber eine Funktion, welche ein int bekommt und ein char* zurückliefert.

Danielo
2013-08-02, 20:23:34
Erst mal vielen Dank für eure Antworten! :)
[...]
a) Was für Vorerfahrung hast du mit Programmiersprachen und b) was willst du wirklich machen?
[...]
Besorg dir was aktuelles. Das wird dir sicher hier und da etwas zeigen, wie man es heute dank drei neuerer Standards nicht mehr macht. Und wenn da was von "<iostream.h>" auftaucht, tu es weg.
[...]
WinAPI, C++ und Casts. :ulol: Seriously, wenn du nicht als erste Programmiererfahrung in C++ alle Tiefen ergründen willst, warum das nicht geht und wie man es macht, nimm C#. Oder beschränke dich auf Standard-I/O. Oder nimm Qt oder so etwas.
[...]
Gewöhn dich dran. In all den Jahren mit etlichen Compilern, Plattformen und Build-Environments hat eher selten mal auf Anhieb etwas reibungslos funktioniert. Kümmer dich drum, meistens ist es für den Programmieralltag sogar recht lehrreich, wenn man es hinbekommen hat.

Hab mich früher mal mit Basic für DOS beschäftigt und natürlich den üblichen Verdächtigen wie PHP und HTML (wobei ich das nicht als Programmiersprache bezeichnen würde, sondern nur als Auszeichnungssprache). Aber das war mehr auf Scriptkiddie-Niveau. Als erstes größeres Projekt wollte ich mir eine Software zum Erfassen eines Bestandes an Hausrat vornehmen.
Ich hab nichts von iostream.h in den Quellen erblicken können.
Es ging nur um das Zurückgeben eines integer-Wertes in einer MessageBox. Das wird wohl keine höhere Mathematik sein, nehme ich an.
Probleme lassen sich fast immer lösen.

[...]
Ohne Code, kann man dir schlecht helfen. Aber hilft das:
std::ostringstream bla;
int zahl = 50;
bla << zahl;
std::cout << bla.str().c_str() << std::endl; //str().c_str() gibt const char * zurück, also 50 als String aus

Ansonsten schreib dir mal selber eine Funktion, welche ein int bekommt und ein char* zurückliefert.
Das muss ich noch mal probieren. Mein Code sieht so aus:
[...]
if (Zaehler >= Max) Application->MessageBox ("Keine Versuche mehr! Die gesuchte Zahl war ","",0) +
(Zufall = random (1000) + 1) + (Zaehler = 1) + Application->MessageBox ("Neue Zahl erzeugt!","",0);
else
[...]

Exxtreme
2013-08-02, 22:44:11
Ich würde von C++-Büchern aus dem Jahre 1999 die Finger lassen. Oft wurden sie von Autoren geschrieben, die hauptsächlich C programmiert haben und entsprechend lesen sie sich so. Sprich, wenn Bücher dann was Modernes und möglichst C++11 da dieser Standard echt nette Dinge mitbringt.

Ectoplasma
2013-08-03, 08:58:39
Auch ist C++ ja nicht zu 100% mit Objective-C kompatibel.
Nicht zu 100%? Die entstammen beide C, aber das wars.


Was bedeutet in diesem Fall überhaupt Kompatibilität? Man kann es auch anders sagen. Objective-C kann man mit C zu 100% mixen. Objective-C++ kann man mit C++ zu 100% mixen. Objective-C++ Dateien haben die Endung *.mm

Nakai
2013-08-03, 13:08:19
Das muss ich noch mal probieren. Mein Code sieht so aus:
[...]
if (Zaehler >= Max) Application->MessageBox ("Keine Versuche mehr! Die gesuchte Zahl war ","",0) +
(Zufall = random (1000) + 1) + (Zaehler = 1) + Application->MessageBox ("Neue Zahl erzeugt!","",0);
else
[...]

Ich wirklich nicht fit mit MessageBox...ich hab die also noch nie verwendet. Dennoch, warum addierst du die ganzen Werte zueinander?
Du willst damit wohl nichts erreichen, sondern nur die Klammern sparen?

Ansonsten musst du die gesuchte Zahl erstmal in ein char-array konvertieren.


#include "string.h"
...

if(Zaehler >= Max)
{
std::ostringstream nbr << Zufall; //Zahl Zufall in ostringstream

string message = "Keine Versuche mehr! Die gesuchte Zahl war " + nbr.str(); //Zahl and message anghängen

Application->MessageBox (message,"",0); //message ausgeben

Zufall = random (1000) + 1; //neue Zahl

Zaehler = 1; //Zähler zurücksetzen

Application->MessageBox ("Neue Zahl erzeugt!","",0); //neue Messagebox

}

Danielo
2013-08-04, 01:17:39
Der kann den String nicht in const char* konvertieren und bricht ab.

Nakai
2013-08-04, 15:53:49
Du meinst nbr.str()?
Dann mach nbr.str().c_str() drauß?