PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : typedef wie und wohin?



Firebird
02-11-2003, 16:25
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?

tuxipuxi
02-11-2003, 16:31
hi,

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

gruss,

tuxipuxi.

RapidMax
02-11-2003, 16:35
Mit diesen Informationen kann ich nur raten. Vermutlich hast du schlicht vergessen den namespace der Klasse anzugeben:


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

axeljaeger
02-11-2003, 16:45
blabla.h inkludieren?

Firebird
02-11-2003, 17:32
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 (http://doc.trolltech.com/3.1/qvaluelist#details) 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...

RapidMax
03-11-2003, 00:20
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 (http://doc.trolltech.com/3.1/qvaluelist#details) ausserhalb der Klasse?

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

Gruss, Andy

anda_skoa
03-11-2003, 10:53
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,
_

Firebird
03-11-2003, 22:12
Jetzt funktioniert's !! :D

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..

axeljaeger
04-11-2003, 14:47
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 {...};

Firebird
04-11-2003, 18:30
Ja schon, aber wenn der Header ignoriert wird ist class bla; die einzige Möglichkeit...

anda_skoa
05-11-2003, 10:11
Wenn man mit der Forwarddeclaration also


class Name;

auskommt, ist die ohnehin vorzuziehen.

Ciao,
_

Mossi
12-09-2005, 23:37
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:

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:

#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 : :o