Abschluss für Klassenmitglieder, die STL-Container sind, schlägt fehl.Vim + OmniCppComplete: Abgeschlossen für Klassenmitglieder, die STL-Container sind
Abschluss auf lokalen Objekten, die STL-Container sind, funktioniert gut.
Zum Beispiel angesichts der folgenden Dateien:
// 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 ----- */
ich die Tags für diese beiden Dateien erzeugt haben mit:
ctags -R --c++-kinds=+pl --fields=+iaS --extra=+q .
Als ich temp.
in der CPP-Typ erhalte ich eine Liste von string
Mitglied funktioniert wie erwartet. Aber wenn ich str.
omnicppcomplete spucke spuckt "Muster nicht gefunden" aus.
Ich habe festgestellt, dass die temp.
Vervollständigung funktioniert nur, wenn ich die using std::string;
Deklaration habe.
Wie bekomme ich die Fertigstellung, um an meinen Klassenmitgliedern zu arbeiten, die STL-Container sind?
bearbeiten
fand ich, dass die Fertigstellung auf Mitglieder, die STL-Container sind funktioniert, wenn ich die folgen Änderungen an der Header machen:
// foo.h
#include <string>
using std::string;
class foo {
public:
void set_str(const string &);
string get_str_reverse(void);
private:
string str;
};
Grundsätzlich, wenn ich using std::string;
hinzufügen und entfernen dann die std::
Namespace-Qualifikationsmerkmal aus dem Member string str;
und die Tag-Datei neu generieren, dann kann OmniCppComplete die Fertigstellung unter str.
ausführen.
Es scheint nicht wichtig zu sein, ob ich let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
im .vimrc
gesetzt habe oder nicht.
Das Problem ist, dass using
Deklarationen in Header-Dateien scheint wie ein großes Nein, also bin ich wieder auf Platz eins.
Komische Ihre hässlichen Hacks zu sehen: Ich habe versucht, den Test und für mich ist es genau das Gegenteil! str funktioniert und temp nicht ... welche version von ctags benutzt du übrigens? – UncleZeiv
tatsächlich temp funktioniert auch, wenn ich ': OmniCpp_DefaultNamespaces = [" Std "]' – UncleZeiv
@UncleZeiv: Ich benutze Ctags 5.7 auf Ubuntu 8.04. Ich fand, dass es egal ist, ob ich Default_Namespaces gesetzt habe oder nicht. Siehe meine Bearbeitung oben. –