C++, suche Tutorial

ü? ;)

Wobei, zugegeben, ich habe gerade festgestellt, dass VC++2010 sogar ä ö und ü zulässt. Vermeide die Buchstaben bitte trotzdem immer! Genauso wie ß.

Der Fehler liegt noch hier drin:
Code:
struct Bestellung
{  
    Lieferanschrift MeineLieferanschrift;
    Kreditkartendaten MeineKreditkartendaten;
[COLOR=red]    land MeinLand;    string bestellteWare;
}[COLOR=red];
Das Semikolon fehlt.

Sorry ich hab jetzt gerade einige male im Nebel herum geraten, jetzt hab ich noch was entdeckt: Das enum land muss vor dem struct Bestellung sein, andernfalls schlägt das Übersetzten fehl.
 
Zuletzt bearbeitet:
#include<iostream>
#include<string>
using namespace std;


struct Lieferanschrift
{
string Vorname;
string Nachname;
string Strasse;
int Hausnummer;
int Postleitzahl;
string Ort;
};


enum land
{
Deutschland=0, Oesterreich, Schweiz, England, Frankreich
};


struct Bestellung
{ Lieferanschrift MeineLieferanschrift;
land MeinLand;
Kreditkartendaten MeineKreditkartendaten;
string bestellteWare;
};

struct Kreditkartendaten
{ int Kreditkartennummer;
int KreditkartenGueltigkeitsdatum;
};







int main()
{

Kreditkartendaten MeineKreditkartendaten;
Lieferanschrift MeineLieferanschrift;
land MeinLand;
string bestellteWare;

cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> bestellteWare;



cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> MeineLieferanschrift.Vorname;

cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> MeineLieferanschrift.Nachname;

cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> MeineLieferanschrift.Strasse;

cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> MeineLieferanschrift.Hausnummer;

cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> MeineLieferanschrift.Postleitzahl;

cout <<"Geben sie Ihren Ort ein" << endl;
cin >> MeineLieferanschrift.Ort;

cout <<"Geben sie Ihr Land ein" << endl;
cin >> MeinLand.land;



cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> MeineKreditkartendaten.Kreditkartennummer;

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> MeineKreditkartendaten.KreditkartenGueltigkeitsdatum;


cout <<"Ihre Bestellung:" << Bestellung <<endl;


}
 
das "struct Kreditkartennamen" würde ich persönlich vor die verwendung von "Kreditkartendaten MeineKreditkartendaten;" in "struct bestellung" schieben ;)
da du ja die Struktur Kreditkartendaten ja schon in der Struktur Bestellung verwendest. Da muss es dem Compiler also bekannt sein .... also so musste ich das früher machen^^
 
Hi Silent,
super Idee von dir, C zu lernen (das "++" lass ich dabei absichtlich noch weg ;)), aber eine Sache wurmt mich gerade (ein wenig):
Kopierst du den Quelltext hier immer direkt aus deinem Programm raus?
Wenn ja, dann würde ich mir gleich eine schöne Form (einrücken mit Tabstopps) angewöhnen - das hilft später enorm (und macht es auch alles übersichtlicher)!

Du kannst es dir ja eh ganz gut bei den Anderen hier abschauen!
Und den Thread hier werd ich auch versuchen weiter zu verfolgen.

Dann noch viel Glück und (vor allem) Spaß beim Programmieren,
max00
 
@fadade: Danke für den Tipp. Jetzt meckert der Compiler noch bei cin >> MeinLand.land;
@max00: Danke für die Tipps, aber warum lässt du absichtlich das "++" noch weg ? Nennt man es erst C++ wenn man bestimmte Dinge verwendet die es in C nicht gibt ?

Grüße
silent12
 
@fadade: Danke für den Tipp. Jetzt meckert der Compiler noch bei cin >> MeinLand.land;
@max00: Danke für die Tipps, aber warum lässt du absichtlich das "++" noch weg ? Nennt man es erst C++ wenn man bestimmte Dinge verwendet die es in C nicht gibt ?

Grüße
silent12
1. Pack doch das Land auch einfach in die Lieferanschrift. Verstehe gerade nicht warum du das nun über enum machen willst :huh:
2. Weil du noch kein C++ machst. C++ ist halt vorallem OOP (objekt orrientierte programmierung) und da du hier vorallem mit struct etc. arbeitest und nicht mit Klassen+Methoden ist es eben nur C und kein C++.
Für den Anfang sicher nicht schlecht wenn man sich die ganzen Basics aneignet!
 
Schau mal rein was ich dir gepostet habe, lass dich nicht von den geänderten Variablennamen stören aber so übersetzt es jetzt und die letzten beiden Schwierigkeiten sind auch drin:
Das enum kann leider nicht einfach mit
Code:
cin >> MeinLand.land;
eingegeben werden sondern muss, wie im Tutorial beschrieben werden erst einmal gecastet werden:
Code:
int main()
{
    //Hilfsvariable anlegen
    int Landcode;
    ...

     cout << endl << "Geben sie Ihr Land ein" << endl;
     cin >>  Landcode;

    myBestellung.myAdress.myLand = static_cast<Land>(Landcode);
    ...
}

Der nächste Punkt ist wieder einfacher zu verstehen: deine Ausgabe lautet ja nur

Code:
cout <<"Ihre Bestellung:" << Bestellung <<endl;

Damit kann der Compiler nichts anfangen, korrekt musst du wieder jedes einzelne Element deiner structs von Hand aufrufen wie beim Einlesen, im Beispielcode von mir jetzt siehst du das für den Name, das muss dann halt analog für alle anderen Elemente auch gemacht werden.

Code:
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

enum Land
{
    Deutschland=0, Oesterreich, Schweiz, England, Frankreich
};

struct Lieferanschrift
{
    string Vorname;
    string Nachname;
    string Strasse;
    int Hausnummer;
    int PLZ;
    string Ort;
    Land myLand;
};

struct Kreditkartendaten
{ 
    int CardNumber;
    int ValidDate;
};

struct Bestellung
{ 
    Lieferanschrift myAdress;
    Kreditkartendaten myCarddates;
    string bestellteWare;
};

int main(int argc, char *argv[])
{
    int Landcode;
    /* Initialisiere myBestellung aus struct Bestellung */
    Bestellung myBestellung;
    cout << "Geben sie Ihre zu bestellende Ware ein" << endl;
    cin >> myBestellung.bestellteWare;

    cout << endl << "Geben sie Ihren Vornamen ein" << endl;
    cin >> myBestellung.myAdress.Vorname;

    cout << endl << "Geben sie Ihren Nachnamen ein" << endl;
    cin >> myBestellung.myAdress.Nachname;

    cout << endl << "Geben sie Ihre Strasse ein" << endl;
    cin >> myBestellung.myAdress.Strasse;

    cout << endl <<"Geben sie Ihre Hausnummer ein" << endl;
    cin >> myBestellung.myAdress.Hausnummer;

    cout << endl << "Geben sie Ihre Postleitzahl ein" << endl;
    cin >> myBestellung.myAdress.PLZ;

    cout << endl << "Geben sie Ihren Ort ein" << endl;
    cin >> myBestellung.myAdress.Ort;

    cout << endl << "Geben sie Ihr Land ein" << endl;
    cin >>  Landcode;

    myBestellung.myAdress.myLand = static_cast<Land>(Landcode);

    cout << endl << "Geben sie Ihre Kreditkartennummer ein" << endl;
    cin >> myBestellung.myCarddates.CardNumber;

    cout << endl << "Geben sie Ihr Kredikarten Gueltigkeitsdatum ein" << endl;
    cin >> myBestellung.myCarddates.ValidDate;

    cout << endl << "Ihre Bestellung:" << endl;
    cout << "Name " << myBestellung.myAdress.Nachname << " " << myBestellung.myAdress.Vorname << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
2. Weil du noch kein C++ machst. C++ ist halt vorallem OOP (objekt orrientierte programmierung) und da du hier vorallem mit struct etc. arbeitest und nicht mit Klassen+Methoden ist es eben nur C und kein C++.

Was unterscheidet eine Struktur von einer Klasse? :devil: Technisch gesehen handelt es sich bei beiden um Datenstrukturen und Compiler unterscheiden diese beiden auch nur im verwendeten default Zugriffsmodus.
 
Das enum habe ich dabei weil in der Aufgabenstellung steht, dass ich Enumerationen auch benutzen soll.
Für was steht das
int main(int argc, char *argv[])

?
 
Versuchs mal mit dem Link hier: int main( int argc, char *argv[])

Vereinfacht gesagt, wenn du dein Programm aus der Konsole heraus startest oder wenn du in Windows auf eine .exe Datei auf Eigenschaften gehst kannst du Parameter anhängen, also z.B.
SpielxyStart.exe -Cheatmode -andererParameter Sowas gabs immer wieder mal, um damit irgend welche Cheatmodes oder Konsolen für Spiele zu aktivieren.
Das funktioniert in Main dann so:
Er erste Teil (int argc) ist ein Integer, also ein Ganzzahlwert welcher die Argumente zählt die im zweiten Teil (char *argv[]) übergeben werden. Das ganze ist jetzt für deinen Wissenstand noch etwas tricky weil da dann Zeiger und Arrays vorkommen, nimm es erst mal so hin. Für das Programm hier ist es jetzt eh uninteressant und bei mir ist es halt mit dran weil mir das sofort mitgeneriert wird wenn ich ein neues Projekt anlege und rauslöschen tu ich es dann auch nicht extra.
 
meldet mir einen Fehler bei (land MeinLand (struct Lieferungsanschrift) )

#include<iostream>
#include<string>
using namespace std;


struct Lieferanschrift
{
string Vorname;
string Nachname;
string Strasse;
int Hausnummer;
int Postleitzahl;
string Ort;
land MeinLand;
};


enum land
{
Deutschland=0, Oesterreich, Schweiz, England, Frankreich
};

struct Kreditkartendaten
{ int Kreditkartennummer;
int KreditkartenGueltigkeitsdatum;
};


struct Bestellung
{ Lieferanschrift MeineLieferanschrift;
Kreditkartendaten MeineKreditkartendaten;
string bestellteWare;
};









int main()
{
Bestellung MeineBestellung;
Kreditkartendaten mycarddates;
Lieferanschrift MeineLieferanschrift;
int Landcode;



MeineBestellung.MeineLieferanschrift.MeinLand = static_cast<land>(Landcode);
string bestellteWare;

cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> MeineBestellung.bestellteWare;



cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Vorname;

cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Nachname;

cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Strasse;

cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Hausnummer;

cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Postleitzahl;

cout <<"Geben sie Ihren Ort ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Ort;

cout <<"Geben sie Ihr Land ein" << endl;
cin >> Landcode;



cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> MeineBestellung.mycarddates.Kreditkartennummer;

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> MeineBestellung.mycarddates.KreditkartenGueltigkeitsdatum;


cout <<"Ihre Bestellung:" <<endl;
cout <<"Name:" << MeineBestellung.MeineLieferanschrift.Vorname << " " << MeineBestellung.MeineLieferanschrift.Nachname << endl;
cout <<"Adresse:" << MeineBestellung.MeineLieferanschrift.Strasse << " " << MeineBestellung.MeineLieferanschrift.Hausnummer <<" " << MeineBestellung.MeineLieferanschrift.Postleitzahl << " " << MeineBestellung.MeineLieferanschrift.Ort << " " << Landcode << endl;


}
 
Bin mir nicht sicher aber ich glaube, dass er nicht eine später erfolgte definition aufrufen kann. Soll heißen : den struckt land vor den anderen stuckts deklarieren.
 
Jo das enum land muss ganz nach vorne. C arbeitet das erst mal zeilenweise ab und kennt zu dem Zeitpunkt wo du das struct mit dem Element land MeinLand anlegst kennt er das enum land noch gar nicht.
 
Er führt es aus aber am Ende funktioniert die Eingabe der Kreditkartendaten nicht (Eingabeaufforderung kommt erst mit der Anzeige der anderen Eingaben (gesamte Bestellung) und man kann sie nicht mehr eingeben und statt dem eingegebenen land kommt eine zahl

Grüße
silent12
 
Wie meinst? Beschreib mal genauer was du machst. Ich hab es so verstanden, du übersetzt das File und startest dann die exe und dann gibts irgendwann ein Problem oder?
 
Erst klicke ich auf compile and run dann öffnet sich der cmd-editor in dem ich die Eingaben mache (außer die Kreditkartendaten) und am Ende kommen die fehlenden Eingabeaufforderungen der Kreditkarten und meine Bestellungsdaten, nur dass das Land als Zahl ausgegeben wird.
 
OK langsam wirds dann bissle hässlicher, ich habe gesehen, du hast den Teil nicht drin wo der Cast für das enum gemacht wird:
cout << endl << "Geben sie Ihr Land ein" << endl;
cin >> Landcode;

myBestellung.myAdress.myLand = static_cast<Land>(Landcode);

Aber jetzt wird es dann auf eine andere Art schwer: Du hast jetzt halt ein Schönwetterprogramm da stehen. Aber das funktioniert halt nur so lala. Also wenn z.B. anstelle einer Hausnummer 13 z.B. 13a schreibst wirds schon krachen. Da setzten jetzt so die Probleme eines solchen Tutorials ein, die zeigen die höchstens die Möglichkeiten aber nicht die techniken dahinter.
 
Aber das mit dem Land sieht für mich danach aus, dass die Eingabe als Zahl gespeichert wird und das mit den Kreditkartendaten muss ja auch an irgendwas liegen
 
Zurück