Fehler mit templates und qt
-
Hallo zusammen,
ich hab mal wieder ein Problem mit templates:Habe mir ein kleines signal/slot-template geschrieben.
Unter normalen Umständen funktioniert das Ganze prima.
Nun habe ich die Klasse aber in ein qt-Projekt eingebunden und bekomme haufenweise Fehlermeldungen.
Ich bin bei diesen vielsagenden Fehlermeldungen mit meinem template-Latain am Ende.
Sieht jemand, ob ich bei der Definition groben Unfug gebaut habe?Ich bekomme folgende Fehlermeldungen (Ausschnitt)
1>main.cpp
1>MainWindow.cpp
1>d:\prog\projects\qt_sim_skeleton\qt_sim_skeleton\signal_slot.h(28) : error C2146: syntax error : missing ')' before identifier 't'
1> d:\prog\projects\qt_sim_skeleton\qt_sim_skeleton\signal_slot.h(43) : see reference to class template instantiation 'sigslots::t_signal<T>' being compiled
1>d:\prog\projects\qt_sim_skeleton\qt_sim_skeleton\signal_slot.h(28) : error C2146: syntax error : missing ';' before identifier 't'
1>d:\prog\projects\qt_sim_skeleton\qt_sim_skeleton\signal_slot.h(28) : error C2182: 'T' : illegal use of type 'void'
1>d:\prog\projects\qt_sim_skeleton\qt_sim_skeleton\signal_slot.h(28) : error C2059: syntax error : ')'
1>d:\prog\projects\qt_sim_skeleton\qt_sim_skeleton\signal_slot.h(29) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int[cpp] #ifndef SIGNAL_SLOT_H #define SIGNAL_SLOT_H #include <set> namespace sigslots { // WARNING: mutex all methods for thread-safety // forward declaration template <class T> class t_slot; template <class T> class t_signal { friend class t_slot<T>; public: ~t_signal() { for (slot_list::iterator iter = slots.begin(); iter!=slots.end(); ++iter) { (*iter)->signals.erase(this); } } void emit(T t) { for (slot_list::iterator iter = slots.begin(); iter!=slots.end();) { slot_list::iterator next = iter; next++; (*iter)->update(t, this); iter = next; } } protected: typedef std::set< t_slot<T>* > slot_list; slot_list slots; }; template <class T> class t_slot { friend class t_signal<T>; public: ~t_slot() { for (signal_list::iterator iter = signals.begin(); iter!=signals.end(); ++iter) { (*iter)->slots.erase(this); } } void bind(t_signal<T>* signal) { signal->slots.insert(this); signals.insert(signal); } void unbind(t_signal<T>* signal) { signal->slots.erase(this); signals.erase(signal); } virtual void update(T param, t_signal<T>* signal) = 0; protected: typedef std::set< t_signal<T>* > signal_list; signal_list signals; }; } #endif // SIGNAL_SLOT_H [/cpp]
-
T Unicode Zeichen, wech damit.
-
?
Ne, am T liegt's nicht.
z.B. mit type gibt's die gleichen Fehler
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
post die datei mal 1:1 oder berichtige auch die fehlermeldungen...
-
slots emit signals SIGNAL und SLOT sind in der QT Bibliothek Makros. Die werden für die QT eigenen Signals und Slots verwendet. Wenn Du also irgendo darüber einen QT-Header einbindest, werden die Makros Deinen Code zerstören.
Dietrich
-
ok, vielen Dank für die Antwort!
Verdammte qt Makros, da helfen nicht mal Namensräume
-
Es hilft aber, seine eigenen Bezeichner spezifischer zu wählen.
