Problème de passage de Qt 5 à Qt 6

Mourad2009B Messages postés 118 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 5 février 2025 - Modifié le 10 oct. 2024 à 14:30
mamiemando Messages postés 33539 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 février 2025 - 29 oct. 2024 à 13:10

Bonjour à tous,


Je code en C++/Qt, et je viens de passer de Qt 5 à Qt 6. Hormis la panoplie d'erreurs que j'ai corrigé, j'ai une erreur que je ne comprends pas, et c'est la suivante :

C:\Qt\Tools\mingw1310_64\x86_64-w64-mingw32\include\objidlbase.h:2026: erreur : 'byte' has not been declared
In file included from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/combaseapi.h:155,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/objbase.h:14,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/ole2.h:17,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/wtypes.h:13,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/winscard.h:10,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/windows.h:97,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/winsock2.h:23,
                 from C:/Data/Fichiers_applications/C++/LibrairiesExternes/curl-8.8.0_1-win64-mingw/include/curl/curl.h:73,
                 from ..\..\Facturation\../Gestion/libcurlmodifiee.h:7,
                 from ..\..\Facturation\fen_de_facturation.h:51,
                 from ..\..\Facturation\fen_de_facturation.cpp:1:
C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/objidlbase.h:2026:5: error: 'byte' has not been declared
 2026 |     byte *pv,
C:\Qt\Tools\mingw1310_64\x86_64-w64-mingw32\include\objidlbase.h:2026: erreur : reference to 'byte' is ambiguous
In file included from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/combaseapi.h:155,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/objbase.h:14,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/ole2.h:17,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/wtypes.h:13,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/winscard.h:10,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/windows.h:97,
                 from C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/winsock2.h:23,
                 from C:/Data/Fichiers_applications/C++/LibrairiesExternes/curl-8.8.0_1-win64-mingw/include/curl/curl.h:73,
                 from ..\..\Facturation\../Gestion/libcurlmodifiee.h:7,
                 from ..\..\Facturation\fen_de_facturation.h:51,
                 from ..\..\Facturation\fen_de_facturation.cpp:1:
C:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include/objidlbase.h:2026:5: error: reference to 'byte' is ambiguous
 2026 |     byte *pv,

Si quelqu'un peut m'aider SVP.
Merci d'avance à tous.

A voir également:

5 réponses

mamiemando Messages postés 33539 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 février 2025 7 828
10 oct. 2024 à 14:43

Bonjour,

Concernant la première erreur, est-ce qu'elle persiste avec un exemple, genre un hello world où tu inclues ce header et ou tu déclares une variable de type byte ? Si oui ça laisserait penser que le problème vient de ce qui installe objidlbase.h, donc je suppose mingw, qu'il faudrait alors tenter de réinstaller ou mettre à jour.

Pour vérifier, et en supposant que objidlbase.h soit dans un dossier d'includes standard, tu pourrais écrire quelque chose comme :

#include <objidlbase.h>

int main() {
    using namespace std;
    byte x = 7;
    cout << x << endl;
    return 0;
}

Concernant la 2e erreur, qui semble liée à la première, j'ai l'impression que c'est la même que dans cette discussion, ce qui laisse penser que tu fais un "using namespace std" à un mauvais endroit (typiquement dans un header). Il ne faut utiliser cette directive que dans des fichiers sources (ou dans les fonctions qui en as besoin comme dans l'exemple ci-dessus).

Une autre hypothèse concerne ton compilateur, qui peut comprendre soit le type BYTE, soit le type byte (voir cette discussion). Une solution "simple" mais un peu sale serait d'ajouter au début de ce header une définition du type byte. Sous Linux on écrirait par exemple :

#include <cstdint>

typedef uint8_t byte;

Bonne chance

0
Mourad2009B Messages postés 118 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 5 février 2025
Modifié le 11 oct. 2024 à 19:08

Bonjour,

Merci mamiemando pour ta réponse je vais tester ça ce week end et je te tiendrai au courant.

0
Mourad2009B Messages postés 118 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 5 février 2025
27 oct. 2024 à 16:32

Bonjour à tous,

J'ai essayé ce que vous m'avez proposé, mais je n'ai pas pu résoudre mon problème.

Pour expliquer la situation, mon programme fonctionnait très bien avec Qt 5.15.2 et la bibliothèque CURL. Cependant, lorsque j'ai tenté de passer à Qt 6.7.3, j'ai rencontré des erreurs. Pour les erreurs liées aux propriétés qui ont changé, c'est normal, mais je suis bloqué par un problème lié au type byte qui apparaît un peu partout. Le pire, c'est que plusieurs fichiers système déclenchent cette erreur.

Par exemple :

"C:\Qt\Tools\mingw1120_64\x86_64-w64-mingw32\include\rpcndr.h:398: erreur : reference to 'byte' is ambiguous
C:/Qt/Tools/mingw1120_64/x86_64-w64-mingw32/include/rpcndr.h:398:119: error: reference to 'byte' is ambiguous"
  
"C:\Qt\Tools\mingw1120_64\x86_64-w64-mingw32\include\objidlbase.h:1993: erreur : 'byte' has not been declared
In file included from C:/Qt/Tools/mingw1120_64/x86_64-w64-mingw32/include/combaseapi.h:155,
                 from C:/Qt/Tools/mingw1120_64/x86_64-w64-mingw32/include/objbase.h:14,
                 from C:/Qt/Tools/mingw1120_64/x86_64-w64-mingw32/include/ole2.h:17,
                 from C:/Qt/Tools/mingw1120_64/x86_64-w64-mingw32/include/wtypes.h:13,
                 from C:/Qt/Tools/mingw1120_64/x86_64-w64-mingw32/include/winscard.h:10,
                 from C:/Qt/Tools/mingw1120_64/x86_64-w64-mingw32/include/windows.h:97,
                 from C:/Qt/Tools/mingw1120_64/x86_64-w64-mingw32/include/winsock2.h:23,
                 from C:/Data/Fichiers_applications/C++/LibrairiesExternes/curl-8.8.0_1-win64-mingw/include/curl/curl.h:73,
                 from ..\..\Facturation\../Gestion/libcurlmodifiee.h:7,
                 from ..\..\Facturation\fen_de_facturation.h:51,
                 from ..\..\Facturation\fen_de_facturation.cpp:1:
C:/Qt/Tools/mingw1120_64/x86_64-w64-mingw32/include/objidlbase.h:1993:5: error: 'byte' has not been declared

et il y a une centaine d'erreur de ce genre.

Toutes les erreurs se produisent dans des fichiers système, et je n'ai défini aucune variable nommée byte dans mon programme. De plus, je n'utilise jamais std dans les headers.

Si vous avez des conseils pour installer correctement Qt, je suis preneur : je compte tout désinstaller et réinstaller pour m'assurer que le problème ne vient pas de là.

Je vous remercie d'avance.

0
mamiemando Messages postés 33539 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 février 2025 7 828
Modifié le 28 oct. 2024 à 12:22

Bonjour,

Comme c'est très sale de modifier à la main les headers du "système" as-tu essayé de suivre un tutoriel (par exemple celui-ci) ?

Si on reste sur le compilateur actuel :

  • Malheureusement, comme je travaille sous Linux, je n'ai pas le genre de problème que tu rencontres qui sont spécifiques à Windows.
  • Charcuter les headers (comme on le fait) est assez sale et n'est pas garanti d'être couronné de succès (risque de dépendances circulaires, etc)
  • Comme je l'ai dit plus haut, le problème vient du fait que le type "byte" est tantôt noté "BYTE" ou "byte" selon le compilateur. L'idée de ma première réponse était de définir ce type à l'endroit où tu en avais besoin. Mais dans tes derniers messages d'erreur, je vois dans tes messages d'erreurs que le type "byte" semble dans "rpcndr.h" ce qui engendre une définition ambigue. Donc plutôt que de déclarer le type nous même, on pourrait réutiliser celui déjà défini en le bout de code que je t'ai suggéré par : 
    #include <rpcndr.h>

Bonne chance

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mourad2009B Messages postés 118 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 5 février 2025
28 oct. 2024 à 18:31

Merci de me répondre,

Je vais en premier lieu désinstaller et ré-installer Tout et ensuite je suivrai ta suggestion de redéfinir le byte, si l'erreur persiste.

Merci encore.

0
mamiemando Messages postés 33539 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 février 2025 7 828
29 oct. 2024 à 13:10

C'est sans aucun doute la meilleure approche :-)

1