[gelöst] MOCing für ein einige Header-Dateien abstellen

Alles rund um die Programmierung mit Qt
Antworten
Cartman
Beiträge: 55
Registriert: 31. März 2006 16:55

[gelöst] MOCing für ein einige Header-Dateien abstellen

Beitrag 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?
Zuletzt geändert von Cartman am 20. Februar 2008 11:15, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Cartman
Beiträge: 55
Registriert: 31. März 2006 16:55

Beitrag 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.
Thorsten
Beiträge: 55
Registriert: 29. Dezember 2004 22:47
Wohnort: Aachen

Beitrag von Thorsten »

Problem ist wohl, dass der Header irgentwo eingebunden wird und dann noch durch den pp läuft.

Versuche mal

Code: Alles auswählen

#undef slots
am anfang der Datei.

Oder

Code: Alles auswählen

#define QT_NO_KEYWORDS
Cartman
Beiträge: 55
Registriert: 31. März 2006 16:55

Beitrag 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...
Thorsten
Beiträge: 55
Registriert: 29. Dezember 2004 22:47
Wohnort: Aachen

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

Code: Alles auswählen

#undef slots
// Deine Funktion
#define slots
Antworten