2017-06-23 3 views
0

J'ai récemment basculé un projet à utiliser des en-têtes précompilés car la compilation devenait lente. Avant de le faire, il a construit sans avertissements importants. Cependant, après avoir ajouté tous les en-têtes QT que j'utilise dans mon projet (dont j'utilise 40-50) au fichier stdafx.h, lors de la construction de la solution, lorsque le fichier stdafx.h est construit, je reçois un grand nombre (1000's) d'avertissement relatif aux fonctions QT. En particulier, je reçois beaucoup de "Attention C4251" par exemple.Grand nombre d'avertissements QT lors de l'utilisation d'une approche d'en-têtes précompilés

1> c: \ Qt \ 5.9 \ msvc2015_64 \ include \ QtGui/qrawfont.h (154): avertissement C4251: ':: QRawFont d': classe 'QExplicitlySharedDataPointer' doit avoir dll-interface pour être utilisé par les clients de la classe 'QRawFont' (compilation du fichier source TitleBar.cpp)

Les deux autres types d'avertissement courants (bien que beaucoup moins) sont c4800 et c4244. J'utilise QT 5.9 64 bits, sur une machine Windows 10 qui exécute VS2015.

Je peux évidemment simplement les désactiver, mais je n'aime pas vraiment faire une telle chose sans comprendre pourquoi cela se produit.

+0

Il existe une discordance entre les définitions d'exportation et d'importation. Comme la classe en haut de l'article: https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application Il doit fournir une définition d'exportation du côté de la bibliothèque dynamique et importer la définition du côté consommateur. – AlexanderVX

+0

Mais je n'en ai aucun contrôle, car tout est interne à QT. – oracle3001

+0

Je voudrais étudier à partir de TitleBar.cpp et comment exactement il inclut le type que vous voyez l'avertissement sur et pourquoi il y a une incompatibilité spécifique avec cet ensemble de définitions/options du compilateur. – AlexanderVX

Répondre

0

Un grand nombre de codes multiplateformes créent des avertissements. Il n'est pas toujours possible de les désactiver, par exemple si un paramètre est inutilisé, un compilateur peut avertir, s'il est artificiellement utilisé pour fermer cet avertissement, un autre pourrait avertir d'un code inaccessible. Ensuite, MS avertit de choses comme la bibliothèque de chaînes standard C, qu'il est souvent impossible d'éviter. Vous devez vous rappeler que MS et Apple ont des sentiments très mitigés à propos de quelque chose comme QT. La dernière chose qu'ils veulent est de vendre des plates-formes indifférenciées pour l'exécution des applications QT. Donc, il n'y a pas beaucoup de motivation pour fournir des avertissements appropriés.