2012-11-07 12 views
6

インテリセンスが私のVSと非常にひどく働いていると動作しませんエラーの検出を停止し、すべての場合に自動完了しません。インテリセンスは、それだけで動作を停止し、私はテンプレートを使用して起動するまで</p> <p>私はC言語でコーディングしてい++それは、100%の罰金を動作します...テンプレートのVS2012究極のC++

私は、それを壊したコードを使って何かをしたことが関係していると思います。

は、だから私はそれで構造体を持つクラスを作成することで開始しました:

template<typename T> 
class List<T> 
{ 
private: 
    struct Node 
    { 
     T value; 
     Node* next; 
     Node* previous; 
    }; 
    Node* First; 
    Node* Last; 
... 
}; 

後に、私はいくつかの追加機能を宣言:

template<typename T> 
inline T List::First() 
{ 
    return First; 
} 

は、これまでのところとても良い、インテリセンスは100%の罰金を働いていますしかし、私が最初にしようとすると、それは動作しません、VSは私に任意のオプションを(Ctrl +スペースは動作しません)を教えてくれません。私はいくつかのナンセンスを入力した場合

も、それはそれは間違っている私に教えてくれません。

sdkjgisjdga->vsrsiib = 123jgi; 

私は本当にこの問題を解決するために何をするか分かりません。

ありがとうございます。

PS:既に設定をリセットしようとしました。

EDIT:私の.hファイルでテンプレートを使用しないと、intellisenseが正しく動作すると言い切ってください。

答えて

8

テンプレートに含まれる内容を決定する前に、テンプレートをインスタンス化する必要があります。たとえば、First->スニペットがList<T>::Nodeを指しており、それは明らかに正確なTに依存しています。

確かに、この単純なケースでは、インテリセンスはただちにT==intの代わりにメンバーを明白にリストすることができました。しかし、何が悪いのかを考えてみましょう。インテリセンスはメンバーを(現在のように)知っているのか、Intellisenseが最も必要な難しいケースで誤って推測しているのでしょうか?

+1

それで、それはintededとして働いていて、答えに何か間違った=)tyをした私ではありませんでした。私はちょうどそれに慣れる必要があります。 –

6

私はこの回答でもう少し遅く、OPがこのコードでもう機能していないかもしれませんが、テンプレートとIntelliSenseを検索している人に役立つと思います。

あなたが試してみることができることは、入力時にタイプミスやエラーを表示したいが、コードをテンプレート可能にしたい場合は#if-#else-# endif:

#if MY_USE_TEMPLATES 
template <typename T> 
#else 
typedef [**your-test-type-here**] T; 
#endif 
class List { 
... your code here ... 
} 

Visual Studio 2015では、これが機能するようです。 #defineを使用してMY_USE_TEMPLATESを0に定義し、IntelliSenseでコードを開発して自動完成など(したがって、間違いが少なくなるように)、テストやコンパイルの準備ができたらMY_USE_TEMPLATESを1に変更します実際のテンプレートコード。

あなたがMY_USE_TEMPLATESを有効にしている間、あなたのリストを参照するコードはエラー(つまり 'List myList'のようなコード)になり、#elseステートメントの中で余分なダミー 'テンプレート'を使って解決できます。しかし、特別なテンプレートなしで#else句を残すことの良い点は、あなたのListを参照する際に発生するエラーが、コードをテストする前にMY_USE_TEMPLATESをオンにしてバグの可能性を減らすための通知として役立つ可能性があることです。(経験では、多くのものや大規模なプロジェクトを扱うときに忘れるのは簡単です...)

「typedef ... T」は安全にしか使えませんその名前 "T"のために一度使用されます。 1つのクラスに対して 'typedef ... TYPE1'を使用できますが、別のタイプの 'typedef ... TYPE2'を使用することはできません異なるタイプの名前を別々の名前空間に入れるのでない限り、 (私はVisual Studio 2015でこれを試しました。)

関連する問題

 関連する問題