Konstruktorproblem



  • Hallo leute,
    ich möchte mir einen eigene Klasse schreiben.
    Hierzu habe ich die h.-Datei erstellt. Hier mal der interssante Teil der Datei:

    #include <complex>
    #include <string>
    using namespace std;
    typedef complex<double> comp;
    typedef struct parameter param;
    
    class zweitor
    {
            private:
                    struct parameter{
                            string name;
                            comp h[4],Y[4],Z[4],A[4];
                    }*ps;
            public:
                    zweitor();
                    zweitor(param x, int index, string name);
    .
    .
    .
    }
    

    In meiner .cpp-Datei habe ich die .h-Datei eingebunden und rufe die Konstruktoren auf:

    zweitor::zweitor()
    {
            set_h((0,0),(0,0),(0,0),(0,0));
            set_Y((0,0),(0,0),(0,0),(0,0));
            set_A((0,0),(0,0),(0,0),(0,0));
            set_Z((0,0),(0,0),(0,0),(0,0));
    }
    
    zweitor::zweitor(param x, int index, string name)
    {
            switch(index)
            {
                    case 0: set_Y(...);
            }
    }
    

    Beim Aufruf des zweitens Konstruktors, meldet er mir den Fehler:
    "Undefinierte Struktur 'parameter'". Diese habe ich doch in der .h-Datei definiert. Warum erkennt er die nicht?
    Bitte helft mir.

    Muecke



  • wo genau im konstruktro meldet er den fehler??

    machst du was mit deiner structur ??



  • Ja, dass liegt daran das du das typedef auf ein globales struct anwenden willst in diesem Fall und das gibt es halt nicht. Es gibt nur das struct in deiner Klasse. Außerdem ist dein struct privat. Erstmal müsste das public sein und dann muss dein typedef hinter der Klassendefinition stehen mit Angabe des/der Namenraums/Klasse in dem/der sich die struct befindet:

    class zweitor
    {
            public:
                    struct parameter{
                            string name;
                            comp h[4],Y[4],Z[4],A[4];
                    };
    
                    zweitor();
                    zweitor(param x, int index, string name);
    
           private:
                    parameter *ps;
    .
    .
    .
    };
    
    typedef struct zweitor::parameter param;
    

    Oder du nimmst das typedef auch mit in die Klasse auf (das typedef kannst du auch public machen, dann kann man die private struct auch von außen benutzt, nur ob das so guter Stil ist, wage ich anzuzweifeln):

    class zweitor
    {
            private:
                    struct parameter{
                            string name;
                            comp h[4],Y[4],Z[4],A[4];
                    };
                    typedef struct parameter param;
                    parameter *ps;
    
            public:
                    zweitor();
                    zweitor(param x, int index, string name);
    .
    .
    .
    };
    

    Greetz



  • Danke für die Hilfe. Ich habe einfach den Fehler gemacht, das struct nicht global zu machen. Ich brauche das in den anderen Klassen auch noch zu genüge. Danke für die Hilfe.

    Muecke


Anmelden zum Antworten