2017-05-04 3 views
0

Attention:comment écrire la liste Initialiser imbriquées, par exemple un QVector de QPairs

qvector.h (509): avertissement C4127: expression conditionnelle est constante (main.cpp) qvector.h (506): lors de la compilation de la fonction membre de modèle de classe 'QVector> :: QVector (std :: initializer_list)' étant compilé avec [T = QPair]

voir référence à fonctionner modèle instanciation « QVector> :: QVector (std :: initializer_list) 'en cours de compilation

mon code:

QVector< QPair< double, float> > container(
     {{40, 0.0f}, 
     {70, 0.95f}, 
     {80, 0.7f}} 
); 

Il se construit bien, je veux juste les avertissements passés (sans changer le niveau d'alerte). Qu'est-ce que je fais mal?

/* modifier */

Est-ce que personne n'a encore de commentaire sur ce que l'avertissement est? ce que cela signifie exactement ?, si d'autres personnes ont l'avertissement? J'ai regardé la documentation de QT sur les listes d'initialisation pour QVectors et il n'a pas dit beaucoup. Personne n'a-t-il quelque chose à dire sur l'instanciation du modèle de fonction?

+0

est le point-virgule manquant juste dans votre pâte? –

+0

haha ​​oui;) merci. pense que le compilateur aurait du mal à construire dans ce cas – codeMetis

Répondre

0

L'avertissement semble inévitable et moins à voir avec ma liste initialiser, plus à voir avec qvector. Tout constructeur de QVector vérifie

if (QTypeInfo<T>::isComplex) 

C'est un simple valeur ENUM, il y a des classes de couple sans modèle, modèle *, ou un modèle dans la syntaxe de la déclaration de nom de classe ci-dessous. J'adorerais avoir cela expliqué à moi!

template <typename T> 
class QTypeInfo { enumbla;} 

template<> 
class QTypeInfo<void> { enumbla;} 

template <typename T> 
class QTypeInfo<T*> { enumbla;} 

Ainsi, le regarde si la valeur ENUM pour la classe QTypeInfo appropriée, ce qui est une constante comme un yay ENUM!

Yay avertissements inévitables, plus de choses à supprimer!