STL コンテナーであるクラス メンバーの完了が失敗しています。
STL コンテナーであるローカル オブジェクトの補完は正常に機能します。
たとえば、次のファイルがあるとします。
// 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 ----- */
以下を使用して、これら 2 つのファイルのタグを生成しました。
ctags -R --c++-kinds=+pl --fields=+iaS --extra=+q .
temp.
cpp を入力するとstring
、期待どおりにメンバー関数のリストが表示されます。しかし、str.
omnicppcomplete と入力すると、「パターンが見つかりません」というメッセージが表示されます。
宣言temp.
がある場合にのみ補完が機能することに気付きました。using std::string;
STL コンテナーであるクラス メンバーで動作するようにするにはどうすればよいですか?
編集
ヘッダーに次の変更を加えると、STL コンテナーであるメンバーの補完が機能することがわかりました。
// foo.h
#include <string>
using std::string;
class foo {
public:
void set_str(const string &);
string get_str_reverse( void );
private:
string str;
};
基本的に、名前空間修飾子を追加してメンバーからusing std::string;
削除し、タグ ファイルを再生成すると、OmniCppComplete は で補完を行うことができます。std::
string str;
str.
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
に設定したかどうかは問題ではないようです.vimrc
。
問題はusing
、ヘッダー ファイルに宣言を配置することは大したことではないように思えることです。そのため、振り出しに戻ります。