Anzeige:
Ergebnis 1 bis 12 von 12

Thema: typedef wie und wohin?

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.10.2003
    Beiträge
    42

    typedef wie und wohin?

    Ich will einer Container-Klasse von einem bestimmten Typ einen Namen geben, damit ich nicht immer mit < und > das so machen muss.

    typedef QValueList<blabla> BlablaList;

    Ich hab mal versucht dass in den Public-Bereich einer Klasse zu schreiben, bekomme aber den Fehler:

    error: 'blabla' was not declared in this scope
    error: template argument 1 is invalid
    error: ISO C++ forbids declaration of 'BlablaList' with no type
    Was bedeutet dieser Fehler?

    Hab ich Typedef vielleicht an der falschen Stelle, oder muss man da noch zusätzlich irgendwas machen?

  2. #2
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,

    gibts den typ blabla denn? das template argument ist naemlich nicht beliebig.

    gruss,

    tuxipuxi.

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Mit diesen Informationen kann ich nur raten. Vermutlich hast du schlicht vergessen den namespace der Klasse anzugeben:
    Code:
    blub.h:
    
    class Blub {
    public:
        typedef QValueList<blabla> BlablaList;
        BlablaList foo(BlablaList& bar);
    };
    
    blub.cpp:
    
    Blub::BlablaList Blub::foo(Blub::BlablaList& bar) {
        BlablaList temp;
        temp = bar;
        return temp;
    }
    
    int main() {
        Blub::BlablaList doh;
    }
    Das Beispiel macht zwar nicht viel Sinn, zeigt aber, dass du bei Rückgabewert sowie den Parametern den gesammten Namespace der Klasse Blub angeben musst. Innerhalb der Funktion Blub ist das nicht notwendig, dafür aber in einer funktion, die nicht zur Klasse Blub gehört, wie z.B. in main().

    Gruss, Andy

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    blabla.h inkludieren?

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.10.2003
    Beiträge
    42
    Erstmal THX für eure Antworten

    gibts den typ blabla denn? das template argument ist naemlich nicht beliebig.
    Jo, es gibt ne Klasse blabla ...

    blabla.h inkludieren?
    ... und die ist auch inkludiert.

    Mit diesen Informationen kann ich nur raten. Vermutlich hast du schlicht vergessen den namespace der Klasse anzugeben
    Hm... ich hab BlablaList eigentlich nur in der Klasse selbst benutzt.
    Aber ich glaub damit hat es auch nicht unbedingt was zu tun.

    Die drei Errors haben als Zeile die Zeile mit typedef da stehen..

    Was mich vor allem Irritiert, ist dass hier das Beispiel anscheinend geht, und bei mir ist das ja auch nicht viel anders.

    Was heißt der Fehler denn eigentlich auf Deutsch?

    - "blabla" wurde in diesem Anwendungsbereich nicht deklariert.
    - Vorlagen-Argument 1 ist ungültig (Was fürn Argument?)
    - ISO-C++ verbietet die Deklaration von BlablaList ohne Typ (Der Typ fehlt wahrscheinlich, weil da ein Fehler drin ist...)

    Was genau ist der Anwendungsbereich der hier gemeint ist?
    Blabla ist deklariert...

  6. #6
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Ich hab mal versucht dass in den Public-Bereich einer Klasse zu schreiben, bekomme aber den Fehler:
    Hast du es nun im public-Bereich der Klasse oder so wie im Beispiel ausserhalb der Klasse?

    Mein oben aufgeführtes Beispiel benutzt die erste Variante im pubic-Bereich der Klasse.

    Gruss, Andy

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Die Fehlermeldung sagt eindeutig, dass "blabla" nicht bekannt ist, d.h. weder eine Forward declaration noch ein include des Headers sind vor dem typedef erfolgt.

    Häng doch einfach mal den Header, der dentTypedef enthält, an ein Posting an.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    28.10.2003
    Beiträge
    42
    Jetzt funktioniert's !!

    Ich bin so doof........ der Fehler war, dass die Klasse nicht deklariert war, wir deutlich da stand, aber es hat Ewigkeiten gedauert bis ich begriffen hab, dass mit deklarieren nicht Header-Datei einbinden gemeint ist, sondern "class blabla;" gg

    Trotzdem danke..

  9. #9
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Muss nicht sein!

    Du kannst zwar mit class blabla; den Namen der Klasse bekanntgeben, das darf aber auch in einem Header stehen und im Header steht in der Regel dann noch ein bißchen mehr, sowas vielleicht class blabla {...};

  10. #10
    Registrierter Benutzer
    Registriert seit
    28.10.2003
    Beiträge
    42
    Ja schon, aber wenn der Header ignoriert wird ist class bla; die einzige Möglichkeit...

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Wenn man mit der Forwarddeclaration also
    Code:
    class Name;
    auskommt, ist die ohnehin vorzuziehen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Mossi
    Gast
    Ich roll jetzt mal dieses alte Thema wieder auf, weil ich damit auch ein kleines Problem habe und einfach kein passendes beispiel finde.
    Ich wollte den anderen Weg gehen und die ValueList außerhalb der Klasse deklarieren. Ich bekomm dann aber immer folgende Fehlermeldungen:
    Code:
    error: Syntaxfehler before ` ;' token
    Ich hab mir dabei gedacht, dass es praktisch wäre, die typedef-Anweisung direkt nach der Klassen-Definition zu schreiben, aber scheinbar passt das nicht so.

    Der Code der Header-Datei sieht folgendermaßen aus:
    Code:
    #ifndef CTEST_H
    #define CTEST_H
    
    #include <qstring.h>
    class CTest
    {
    public:
        CTest();
    
        ~CTest();
    
    private:
        QString mTestString;
    };
    
    typedef QValueList<CTest> CTestCollection;
    
    #endif
    EDIT: Hat sich erledigt. Man sollte um die Uhrzeit einfach nicht mehr rumhacken. Hab lediglich den Include von qvaluelist.h vergessen :
    Geändert von Mossi (12-09-2005 um 23:46 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •