Inline-Funktionen in MinGW importieren

Ich verwende eine gemeinsam genutzte Bibliothek, die Inline-Funktionen in ihrem Header definiert.

Hier ist ein reduzierter Testfall, wie er von der mit der Bibliothek verknüpften Kompilierungseinheit angezeigt wird (für die Version, die von der Bibliothek angezeigt wird, ersetzen Sie sie einfachdllimport durchdllexport).

class __declspec(dllimport) MyClass {
public:
    int myFunc2();
    int myFunc1();
};

inline int MyClass::myFunc2(void) {
    return myFunc1();
}

inline int MyClass::myFunc1(void) {
    return 0;
}

Wenn Sie dies kompilieren, erhalten Sie die Warnung:

Warnung: 'int MyClass :: myFunc1 ()' wurde ohne das dllimport-Attribut neu deklariert, nachdem mit der dll-Verknüpfung darauf verwiesen wurde [standardmäßig aktiviert]

Bitte beachten Sie, dass die Reihenfolge, in der die Funktionen definiert sind, wichtig ist, um die Definition vonmyFunc1 vor der Definition vonmyFunc2 führt zu keinen Warnungen.

Beachten Sie auch, dass dieser Code ohne Warnungen unter Visual C ++ kompiliert wird. Diese Warnungen gelten zumindest für MinGW, möglicherweise für GCC im Allgemeinen. Bearbeiten: Es kam mir in den Sinn, dass ich möglicherweise überprüfen muss, ob die Warnung nicht durch eines der vom Projekt gesetzten Flags verhindert wird.

Meine Fragen sind dann:

Warum dieses Verhalten?DeklarierenmyFunc1 wieinline innerhalb der Klassendeklaration behebt das Problem. Warum das ? Es ist auch gegen dieempfohlener Weg Dinge zu tun.Gibt es eine andere (bessere?) Möglichkeit, dieses Problem zu beheben?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage