Seite 1 von 1
[gelöst] MOCing für ein einige Header-Dateien abstellen
Verfasst: 19. Februar 2008 13:01
von Cartman
Hallo,
wie kann ich den MOCer zum Überspringen einer Header-Datei überreden? Ich habe da eine Variable "slot", die offensichtlich vom MOCer als Qt-Schlüsselwort uminterpretiert wird. Ich möchte allerdings die Variable auch nicht eigenmächtig umbenennen, da es sich hier um Schnittstellen handelt.
Gibt es dazu ein #pragma oder #define?
Verfasst: 19. Februar 2008 14:30
von Christian81
Wenn kein Q_OBJECT im Header ist, muss auch kein moc ausgeführt werden. Ansonsten bleibt Dir nichts anderes übrig.
Ggf. hilft Dir QT_CLEAN_NAMESPACE weiter
Verfasst: 19. Februar 2008 14:31
von macman
Wäre mir neu das der MOC von sich aus Header-Dateien bearbeitet. Wenn er einen Header in Ruhe lassen soll, dann ruf ihn nicht damit auf.
Verfasst: 20. Februar 2008 10:28
von Cartman
Ich habe kein QT_OBJECT im Header eingebaut. Die betroffenen Header sind 100 % Qt-frei. Trotzdem gibt es Probleme, sobald der Variablenname "slots" ins Spiel kommt:
Code: Alles auswählen
c:\dokumente und einstellungen\UserXYZ\eigene dateien\ebn\kbl\KBL_part_structure_base.h(197) : error C2208: 'std::vector<_Ty>': Keine Elemente definiert, die diesen Typ verwenden
with
[
_Ty=KBL::Connectivity::Slot_occurrence *
]
c:\dokumente und einstellungen\UserXYZ\eigene dateien\ebn\kbl\KBL_part_structure_base.h(197) : fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
NMAKE : fatal error U1077: ""c:\Programme\Microsoft Visual Studio 8\VC\BIN\cl.EXE"": Rückgabe-Code "0x2"
Stop.
NMAKE : fatal error U1077: ""c:\Programme\Microsoft Visual Studio 8\VC\BIN\nmake.exe"": Rückgabe-Code "0x2"
Stop.
Jeder andere Name wie "slot" oder "slotx" funktioniert. Ich habe auch schon versucht, die Header aus dem qmake-Projekt (HEADER=...) rauszunehmen: immer noch der gleiche Fehler. An einer Vererbungskollision bei diesem Variablennamen liegt es auch nicht. Auch gibt es weit und breit keinen Typen mit dem Namen "slots", "Slots", etc.
Verfasst: 20. Februar 2008 10:57
von Thorsten
Problem ist wohl, dass der Header irgentwo eingebunden wird und dann noch durch den pp läuft.
Versuche mal
am anfang der Datei.
Oder
Verfasst: 20. Februar 2008 11:15
von Cartman
Jo, danke Thorsten. Es klappt mit beiden Preprozzi-Befehlen.
Ich denke aber, daß ich das #define bzw. #undef wieder rückgängig machen muß, nachdem ich meine Problem-Header inkludiert habe, richtig? Sonst wird folgender Qt-Code nicht gehen, denke ich...
Verfasst: 20. Februar 2008 12:03
von Thorsten
in der Qt-Datei
\src\corelib\kernel\qobjectdefs.h
wird das Makro definiert. Das Makro enthält nichts und ist nur zum entfernen des "Schlüsselwortes" im Quellcode da.
Am besten ist es wohl, wenn du direkt von und direkt nach der detreffenden Funktion das Qt-Makro aus, bzw. wieder ein schaltest.