scanf kickt mich aus dem Programm raus...
-
rogon schrieb:
Was empfiehlst du mir beim C++ für ein gutes Buch?
Es gibt sehr viele.
Extra dafür gibt es hier im Forum einen sog. Buchthread mit vielen guten Beiträgen zum Thema C++-Buch.Edit: Hier im FAQ (wo du auch öfter reinschauen solltest
).
-
Was willst du denn jetzt überhaupt? C oder C++? Wie schon gesagt, hast du bisher C gelernt, aber durch dein
Ich habe mir den Code aus verschiedenen Codes im Internet zusammengestellt und weiss eigentlich nicht genau was alle Befehle bedeuten!
hast du versehentlich C++ eingebaut, was natürlich schief ging. Aber da du dein C anscheinend mit einem C++-Compiler übersetzt hast, war es zumindest grammatikalisch richtig, weswegen dieser sich nicht beschwert hat. Was natürlich auch schlecht ist, das sollte man nie machen.
C und C++ sind wirklich sehr verschieden, sie haben bloß eine ähnliche Grammatik und manche Wörter sind gleich. Ungefähr so, wie wenn normale Leute mit Juristen reden. Man merkt zwar, dass die Sprache irgendwie ähnlich ist, aber man versteht nix und am Ende ist man sein Geld los.
Wenn du jetzt anfängst, auf C++ umzusteigen, dann darfst/solltest du alles vergessen, was du bisher gelernt hast.
-
314159265358979 schrieb:
using-Direktiven sind manchmal sogar nötig, um ADL zu triggern.
Bitte was?! Kannst Du bitte erklären, was Du mit diesem Satz meinst? So klingt das erstmal für mich nach einer falschen Aussage. Aber vielleicht missverstehe ich Dich ja auch ...
-
template <typename T> void foo(T& a, T& b) { std::swap(a, b); // kein ADL } template <typename T> void bar(T& a, T& b) { using std::swap; swap(a, b); // ADL }
-
rogon schrieb:
Eigentlich dachte ich, dass C beim C++ abwärtskompatibel ist!
[...]
std::string drive;
std::cin >> drive;
[...]
std::string drive;
scanf ("%s", &drive);Im Wesentlichen fliegt Dir das hier um die Ohren, weil Du lügst. Wegen "%s" erwartet scanf eine Adresse vom Typ char* und nicht string*. Die Sprache an sich lässt so etwas zu, weil die Sache mit den variadischen Funktionen in C überhaupt nicht typsicher ist.
Guck mal, ob Du bei Deinem Compiler so konfiguriert bekommst, dass er solche Sachen prüft und vor Missbrauch warnt. Die Funktionssignatur gibt zwar nicht genug Informationen her, um so etwas überprüfen zu können, aber da solche Fehler in C relativ prominent sind, hat der eine oder andere Compiler-Hersteller den Compilern den Zusammenhang zwischen dem Format-String und den folgenden Argumenten beigebracht.
Alternativ: Lass die Finger von Sachen, die nicht typsicher sind.
314159265358979 schrieb:
template <typename T> void foo(T& a, T& b) { std::swap(a, b); // kein ADL } template <typename T> void bar(T& a, T& b) { using std::swap; swap(a, b); // ADL }Erstens ist das das keine using-Direktive sondern eine using-Deklaration.
Zweitens triggerst Du hier nicht ADL per using-Deklaration sondern dadurch, dass das zweite swap unqualifiziert ist. Verbuchen wir das als ein Missverständnis.
-
krümelkacker schrieb:
Erstens ist das das keine using-Direktive sondern eine using-Deklaration.
Ist dem so? Was ist dann eine Direktive?
krümelkacker schrieb:
Zweitens triggerst Du hier nicht ADL per using-Deklaration sondern dadurch, dass das zweite swap unqualifiziert ist. Verbuchen wir das als ein Missverständnis.
Strenggenommen ja. Aber ohne using würde die unqualifizierte Version nicht funktionieren...
-
Direktiven erkennst du am Schlüsselwort
namespace. Also...using namespace dings;ist eine using-Direktive.
using std::swap;ist eine using-Deklaration.Ersteres sorgt dafür, dass, falls die Namenssuche im globalen Scope angelangt ist, auch Namen aus dings berücksichtigt werden.
Zweiteres führt den Namen einer Entität (Klasse, Funktion, etc, nur kein Namensraum) in den Scope ein, wo die using-Deklaration steht (typischerweise nicht der globale).
-
Aah! Ok, alles klar!

Ich möchte hier noch allen für die tollen Antworten danken!
You Guys Rock!

Liebe Grüsse
Rogon
-
Hacker schrieb:
Hol dir schnell ein gutes Buch! Viel, das im Internet steht ist schrott.
Seit Du Dich hier austobst, wurde es noch mehr Schrott.
Jeden Thread killst Du mit deinen Failtips. Macht keinen Spaß mehr hier zu lesen.
-
lolalter schrieb:
Hacker schrieb:
Hol dir schnell ein gutes Buch! Viel, das im Internet steht ist schrott.
Seit Du Dich hier austobst, wurde es noch mehr Schrott.
Jeden Thread killst Du mit deinen Failtips. Macht keinen Spaß mehr hier zu lesen.Mutig. Aber antstatt ihm eine Mail zu schreiben musst du hier noch weiterspammen... besser bist du auch nicht...