L'achèvement sur les membres de la classe qui sont des conteneurs STL échoue. L'achèvement sur les objets locaux qui sont des conteneurs STL fonctionne correctement.Vim + OmniCppComplete: achèvement sur les membres de la classe qui sont des conteneurs STL
Par exemple, étant donné les fichiers suivants:
// foo.h
#include <string>
class foo {
public:
void set_str(const std::string &);
std::string get_str_reverse(void);
private:
std::string str;
};
// foo.cpp
#include "foo.h"
using std::string;
string
foo::get_str_reverse (void)
{
string temp;
temp.assign(str);
reverse(temp.begin(), temp.end());
return temp;
} /* ----- end of method foo::get_str ----- */
void
foo::set_str (const string &s)
{
str.assign(s);
} /* ----- end of method foo::set_str ----- */
J'ai produit les balises pour ces deux fichiers à l'aide:
ctags -R --c++-kinds=+pl --fields=+iaS --extra=+q .
Lorsque je tape temp.
dans le cpp je reçois une liste de string
Le membre fonctionne comme prévu. Mais si je tape str.
omnicppcomplete crache "Pattern Not Found".
J'ai remarqué que la complétion temp.
ne fonctionne que si j'ai la déclaration using std::string;
.
Comment puis-je obtenir l'achèvement de travailler sur mes membres de classe qui sont des conteneurs STL?
Modifier
J'ai trouvé que l'achèvement des membres qui sont des conteneurs STL fonctionne si je fais les modifications de suivi à l'en-tête:
// foo.h
#include <string>
using std::string;
class foo {
public:
void set_str(const string &);
string get_str_reverse(void);
private:
string str;
};
En gros, si j'ajoute using std::string;
puis retirez le std::
nommez le qualificatif d'espace du membre string str;
et régénérez le fichier de balises, puis OmniCppComplete est en mesure d'effectuer l'achèvement sur str.
.
Il ne semble pas important si oui ou non j'ai let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
dans le .vimrc
.
Le problème est que mettre des déclarations using
dans les fichiers d'en-tête semble être un gros non-non, donc je suis de retour à la case départ.
drôle: J'ai essayé votre test et pour moi, c'est exactement le contraire! str fonctionne et temp ne ... quelle version de ctags utilisez-vous d'ailleurs? – UncleZeiv
en fait la température fonctionne aussi si je fais ': laissez OmniCpp_DefaultNamespaces = [" std "]' – UncleZeiv
@UncleZeiv: J'utilise ctags 5.7 sur Ubuntu 8.04. J'ai trouvé que cela n'a pas d'importance si j'ai Default_Namespaces. Voir ma modification ci-dessus. –