Macro doppelt definiert



  • Hallo,

    ich habe das Problem, dass ich Qt mit einer 3rd Party Bibliothek benutzen muss (= habe keine andere Wahl).

    Problem: Ich nutze das Qt Makro SIGNAL. Dummerweise wurde ein Makro mit identischem Namen in der 3rd Party Lib deklariert (Makros sind ganz toll).

    Das Visual Studio quittiert mit einem Fehler.

    Versucht habe ich mittels undef das SIGNAL zu entfernen und in meinen GUI-cpps danach wieder eine Qt-Header einzubinden, um nur das Qt SIGNAL zu haben. In der Praxis geht das "so lala". Man muss halt peinlichst genau darauf achten, wann was inkludiert und "undef" gemacht wird.

    Jetzt die Frage: Was kann ich sonst noch machen? Kann man dem Präprozessor mitteilen, welches Makro er nehmen soll?

    😕



  • Du könntest

    1. das Qt-Makro unter einem anderen Namen kopieren und verwenden
    2. Funktoren verwenden (siehe auch http://doc.qt.io/qt-5/signalsandslots-syntaxes.html)
    auto slider = new QSlider(this);
        auto doubleSpinBox = new QDoubleSpinBox(this);
    
        // So 
        connect(slider, &QSlider::valueChanged,
                doubleSpinBox, &QDoubleSpinBox::setValue);
    
    1. die 3rd Party Bibliothek mit einem Wrapper vom restlichen Code isolieren


  • Könntest auch nen neuen Header machen der die Lib inkludiert. In dem Header machst du dann das #undef und redef. Wenn du dann nur noch deinen Header benutzt, passt automatisch immer alles.



  • Ich habe nun das Makro kopiert und umbenannt. Ist bisher die einfachste Lösung