Forum
Tipps
News
Menu-Icon

C++: Problem bei Verwendung des eigenen Datentyps in einer Klasse

Hallo, ich hoffe, ihr könnt mir helfen.

Ich soll für einen Wettbewerb (Informatik.AG @ TU-Chemnitz)
mit einem eigenen Datentyp(via struct)"buch" erstellen und dann in einer selbst definierten Klasse(class)"bibliothek" ein Feld für 2000 Bücher definieren. Also:

buch buecher[2000];

Nur dann bringt mir Code::Blocks eine Fehlermeldung, dass der Datentyp ja nicht definiert sei.

Mein Programm bis jetzt:
#include<iostream>

using namespace std;

int i,j,buchnum;
bool kauffund=false;

struct Buch
{
    bool buch_gueltig; // Buchnummer belegt?
    int laufende_nummer; // Aktuell hoechste Buchnummer
    int buchnummer; // Nummer des Buches
    char autor_name[100]; // Familienname Autor
    char autor_vorname[100]; // Vormane Autor
    char titel[100]; // Titel des Buches
    int leserausweis; // Leserausweisnummer des aktuellen Ausleihers
    char ende_leihfrist[9]; // Rueckgabedatum ttmmjjjj
};

class bibliothek
{
    private:
    bool buecher[2000]; // maximal 2000 Buecher
    int akt_bestand; // Anzahl des aktuellen Bestands
    int laufende_nummer; // laufender Index im Feld buecher
    public:
    bibliothek(); // Konstruktor "Bibliothek"
    bool buch_kauf(); // Buch kaufen, Rueckgabe
    bool buch_verkauf(int buchnr);
    bool ausleihe (int buchnr);
    bool rueckgabe (int buchnr);
    void recherche();
};

bibliothek::bibliothek()
{
    akt_bestand=0;
    laufende_nummer=0;
    for(i=0;i<2000;i++)
    {
        buecher[i]=false;
    }
}
bool bibliothek::buch_kauf()
{
    for(j=0;j<2000 and kauffund==false;j++)
    {
        if(buecher[j]=false)
        {
            kauffund=true;
            buchnum=j;
        }
    }
    if(kauffund==false)
    {
        return false;
    }
    else
    {
        cout<<"Titel?";
        cin<<buch.titel;
        buch.buchnummer=j;
        cout<<
        return true;
    }
}
bool bibliothek::buch_verkauf(int buchnr)
{

    return true;
}
bool bibliothek::ausleihe(int buchnr)
{

    return true;
}
bool bibliothek::rueckgabe(int buchnr)
{

    return true;
}
void bibliothek::recherche()
{

}
int main()
{
    bibliothek bsp_schule;
    bool weiter = true;
    char auswahl;
    bool erg;
    int b_nr;
    while (weiter == true)
    {
        cout << "Buch kaufen -----> k\n";
        cout << "Buch verkaufen -----> v\n";
        cout << "Buch ausleihen -----> a\n";
        cout << "Buch zurueckgeben-----> r\n";
        cout << "Buch suchen -----> s\n";
        cout << "Ende -----> q\n";
        cin >> auswahl;
        switch (auswahl)
        {
            case 'k' : erg = bsp_schule.buch_kauf();
                       if (erg == true)
                       cout << "Kauf hat funktioniert\n";
                       else
                       cout << "Kauf hat nicht funktioniert\n";
                       break;
            case 'v' : cout << "Eingabe Buchnummer";
                       cin >> b_nr;
                       erg = bsp_schule.buch_verkauf(b_nr);
                       if (erg == true)
                       cout << "Verkauf hat funktioniert\n";
                       else
                       cout << "Verkauf hat nicht funktioniert\n";
                       break;
            case 'a' : cout << "Eingabe Buchnummer";
                       cin >> b_nr;
                       erg = bsp_schule.ausleihe(b_nr);
                       if (erg == true)
                       cout << "Ausleihe hat funktioniert\n";
                       else
                       cout << "Ausleihe hat nicht funktioniert\n";
                       break;
            case 'r' : cout << "Eingabe Buchnummer";
                       cin >> b_nr;
                       erg = bsp_schule.rueckgabe(b_nr);
                       if (erg == true)
                       cout << "Rueckgabe hat funktioniert\n";
                       else
                       cout << "Rueckgabe hat nicht funktioniert\n";
                       break;
            case 's' : bsp_schule.recherche();
                       break;
            case 'q' : weiter = false;
        }
    }
}

PS: Ich weiß, dass ich buck_verkauf, etc. noch nicht habe, da ich gerade etwas feststecke...

Antworten zu C++: Problem bei Verwendung des eigenen Datentyps in einer Klasse:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
cin<<buch.titel;

Der Datentyp ist schon definiert, die Variable aber nicht. Du musst ja erstmal eine Variable mit Namen "buch" anlegen, bevor du da was reinschreiben kannst.  Also ca. so:

Buch buch;
cin>>buch.titel;

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

***mademobile***Das ist mir schon klar, aber ich musste ja erst einmal etwas zum debuggen hinschreiben. Hast du einen Vorschlag, wie ich dass mit der Definition lösen kann?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

***mademobile***Hat sich mittlerweile erledigt. Habe bei

struct buch
nur "typedef" vergessen.

Aber dein Hinweis war falsch.
Definiert wird es mit struct.
Implementiert schon in "class bibliothek"
in dem 2000er Feld.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hä? Bei dem Code den du gepostet hast, fehlt eindeutig die Variable. Ob du das struct nu mit oder ohne typedef machst. Das sollte in C++ übrigens auch keinen Unterschied machen, weil im Gegensatz zu C das Schlüsselwort struct bei der Variablendeklaration wggelassen werden kann. In C brauchte man das ja noch oder musste das struct eben mit typedef definieren. Ich kenn jetzt Code::Blocks nicht, aber mein Compiler (DevC++) sieht das auch so...
Im übrigen solltest du vielleicht nächstes mal Code posten, mit dem sich dein Problem reproduzieren lässt, dann müssen wir nicht raten, was denn das Problem überhaupt ist. 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ich meinte, die Verwendung der Struktur "buch" ist ja  nur in der Klasse "bibliothek" vorhanden.

Also muss ich ja, wie geschrieben, nur noch in der main() dann die Klasse bibliothek anwenden.

Implementierung von der Struktur buch musste so lauten:

buch buecher[2000];

Damit wird ja dass buecher-array mit der Struktur buch definiert. Also habe ich jetzt 2000 buch Vars.
( buecher[0] bis [buecher[1999]] )

Warum dass nur mit typedef geht, weiß ich jatzt aber leider auch (noch) nicht... ???

« DokumentationLazarus wo downloaden?? »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...

Unicode
Unicode ist ein international anerkannter Standard, der als universeller Zeichencode ("Universal Code") dient und durch das Unicode-Konsortium entwickelt und verwaltet wi...

QR-Code
QR-Codes, die Abkürzung für "Quick Response Codes", sind eine Form von zweidimensionalen Barcodes. Damit lassen sich Informationen schnell und effizient speiche...