2015-02-06 55 views
7

我如何在Qt Creator中爲std::vector工作自動完成?它不正常工作?Qt Creator的自動完成(智能感知)不適用於std ::向量元素

例如,在一個新的新項目上,我創建了一個struct foo { int bar; };。如果我創建FOO的QVector,智能感知/自動完成正常工作:

enter image description here

但是對於std::vector<foo> v2什麼也沒有發生後,我按Qt Creator的3.3 v2[0].

我點。 0,使用Visual Studio編譯器工具鏈(所以STL來自VS,而不是gcc,如果這有什麼區別的話)。

編輯:我發現了一個相關的bug報告(關於迭代器雖然) - https://bugreports.qt.io/browse/QTCREATORBUG-1892。我也重現了這個問題。

編輯2:我有一個自定義的模板類測試:

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

而且它的正常工作:

enter image description here

+0

不可能。不幸的是,Qt Creator的代碼模型存在模板問題。有一些工作正在使用clang的,但我不知道結果如何。 – 2015-02-09 10:54:52

+0

@cassiorenan Btw,這是否也爲你重現? – sashoalm 2015-02-09 11:05:06

+0

是的,它的確如此。我使用Qt Creator 3.3.2 順便說一句,你的測試是有缺陷的。嘗試實現一個簡單地返回a的運算符[]。 – 2015-02-09 11:22:26

回答

5

按我的意見,這是根本不可能做到這一點。你可以提交一個錯誤報告,並希望他們修復。 更好地說明,它是與的std :: vector的實現:

reference operator[](difference_type _Off) const 
    { // subscript 
    return (*(*this + _Off)); 
    } 

在其reference被Typedef的爲Allocator::reference。顯然,Qt Creator在原來的課程中遇到了問題。 相比之下,與QVector的...

inline T &QVector<T>::operator[](int i) 
{ Q_ASSERT_X(i >= 0 && i < d->size, "QVector<T>::operator[]", "index out of range"); 
    return data()[i]; } 

...這是直接定義T中&的條款,你可以看到爲什麼它適用於它。

更新:查看cppreference's page on vector,看起來,在C++ 11之後,應該將typedef定義爲value_type &。不過,我已經嘗試過使用CONFIG += c++11進行構建,但它仍然不起作用。

而另一個更新:託管編寫一個最小的測試用例不工作

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

我設法簡化@凱西奧的示例代碼重現問題:

struct T { int b; }; 
struct foo{ 
    typedef T value_type; 
    T a; 
    value_type operator[](int); 
    value_type bar(); 
}; 

有趣的是那a.bar().工作,但a[1].沒有。另外,最有說服力的是,如果您將operator []聲明爲foo::value_type operator[](int);,則自動完成將起作用。

2

現在可以使用叮噹聲代碼模式:

轉到幫助 - >關於插件... - >啓用ClangCodeModel

重新啓動Qt Creator。檢查它是否被激活; 工具 - > C++ - >代碼模型

Voila代碼自動完成std:vector。

相關問題