7
votes

L'autocomplete de Qt Creator (IntelliSense) ne fonctionne pas pour STD :: Éléments vectoriels

Comment puis-je faire une autocomplete dans QT Creator Travail pour std :: vecteur code>? Est-il normal de ne pas fonctionner?

Par exemple, sur un nouveau projet nouveau, je crée un struct foo {int bar; }; code>. Si je crée un QVecteur de FOO, intellisense / autocomplete fonctionne bien: p>

Entrez la description de l'image ici p>

mais pour un std :: vecteur v2 code> rien ne se passe strong> après avoir appuyé sur le point dans v2 [0]. p>

Je suis sur Qt Creator 3.3.0, à l'aide de la chaîne de l'outil Visual Studio Compiler (donc la STL vient de VS, pas de GCC si cela fait toute différence). P> edit: strong> J'ai trouvé un bogue associé signalé (à propos des itérateurs) - HTTPS: / /bugreports.qt.io/browse/qtcreatorbug-1892 . Je reproduis ce problème aussi. P>

EDIT 2: STRUT> J'ai testé avec une classe de modèle personnalisée: P>

struct bar {
    int b;
};
template<class T> struct foo {
    T operator [](int a) { return T(); }
};


5 commentaires

Pas possible. Malheureusement, le modèle de code de Qt Creator a des problèmes de modèles. Il y avait des travaux de travail pour le faire utiliser de Clang, mais je ne sais pas comment cela s'est retrouvé.


@Cassiorenan BTW, cela se reproduit-il aussi pour vous?


Oui. J'utilise QT Creator 3.3.2 BTW, votre test est défectueux. Essayez de mettre en œuvre un opérateur [] qui renvoie simplement un.


@Cassiorenan merci, j'ai réparé le test (ça marche toujours).


Oui, j'ai testé ici aussi, après avoir commenté. Apparemment STD :: La mise en œuvre du vecteur est le coupable ici. Vérifier la réponse.


3 Réponses :


5
votes

Selon mes commentaires, il n'est tout simplement pas possible de le faire. Vous pouvez déposer un rapport de bogue et espérer qu'ils le récupèrent. Pour expliquer mieux, il a quelque chose à voir avec std :: La mise en œuvre de vecteur: xxx pré>

dans laquelle référence code> est typé comme allocator :: Référence . Apparemment, QT Creator a des problèmes en suivant cela à la classe d'origine. Comparez cela avec qvector ... p> xxx pré>

... qui est défini directement en termes de t &, et vous pouvez voir pourquoi cela fonctionne pour cela. P>

Mise à jour: Regardant dans Page CPPRAGENCE sur Vector , il semble que, après c + +11, il faut que cela devrait être typé comme il suffit de valoriser_type &. J'ai essayé de bâtir avec config + = c ++ 11 code> et il ne fonctionne toujours pas, cependant. P>

et une autre mise à jour: réussi à coder un cas de test minimal qui ne fait pas " T Travailler P>

template<typename T>
class foo{
public:
    typedef T value_type;
    typedef value_type& reference;
    T a;
    reference operator[](int){return a;}
};

struct bar{int b;};


0 commentaires

0
votes

J'ai réussi à simplifier le code d'exemple de @ Cassio pour reproduire le problème: xxx

Qu'est-ce qui est intéressant, c'est que A.bar (). fonctionne mais a [1]. ne le fait pas. En outre, ce qui dit le plus, c'est que si vous déclarez l'opérateur [] comme foo :: value_type opérateur [] (int); , automatique fonctionnera.


0 commentaires

4
votes

Maintenant, le modèle de code Clang est disponible:

aller à l'aide-> sur les plugins ... -> Activer CLANGCODEMODEL

Redémarrez QT Creator. Vérifiez que cela a été activé; Outils -> C ++ -> Modèle de code

Code Voila Autocomplète pour STD: Vector.


0 commentaires