C++ Intellisense不使用模板VS2012 ultimate c++;

C++ Intellisense不使用模板VS2012 ultimate c++;,c++,visual-studio-2012,intellisense,C++,Visual Studio 2012,Intellisense,Intellisense与我的VS工作得非常糟糕 当我在C++中编码时,它工作100%级,直到我开始使用模板,然后它就完全停止工作,停止检测错误,在所有情况下都不自动完成。 我倾向于相信这与我用我的代码所做的破坏它的事情有关 因此,我首先创建了一个包含struct的类: template<typename T> class List<T> { private: struct Node { T value; Node* nex

Intellisense与我的VS工作得非常糟糕

当我在C++中编码时,它工作100%级,直到我开始使用模板,然后它就完全停止工作,停止检测错误,在所有情况下都不自动完成。 我倾向于相信这与我用我的代码所做的破坏它的事情有关

因此,我首先创建了一个包含struct的类:

template<typename T>
class List<T>
{
private:
    struct Node
    {
        T value;
        Node* next;
        Node* previous;
    };
    Node* First;
    Node* Last;
...
};
我真的不知道该怎么做才能解决这个问题

谢谢你的时间和努力

PS:我已经尝试重置配置了


编辑:忘了说如果我没有在.h文件中使用模板,则intellisense工作正常。

模板需要实例化,然后才能确定它们包含的内容。例如,您的
First->
代码段指向一个
List::Node
,这显然取决于确切的
T


当然,在这个简单的例子中,Intellisense只需替换一下
T==int
就可以毫不含糊地列出成员。但是,更糟糕的是:智能化不知道成员(如现在)或智能体错误猜测,在最困难的情况下,你最需要它?

< P>我有点晚这个答案,也许OP不在这个代码上工作,但我认为这仍然可以帮助人谁是搜索模板和智能感知。p> 如果您希望在键入时能够看到输入错误和错误,但如果您希望代码能够使用模板,可以尝试使用#if-#else-#endif:

#如果我的"使用"模板
模板
#否则
typedef[**此处为您的测试类型**]T;
#恩迪夫
类列表{
…你的代码在这里。。。
} 
在VisualStudio2015中,这似乎是可行的。您可以将MY_USE_TEMPLATES定义为0(使用#define),使用IntelliSense和auto complete等开发代码(这样可以减少错误),然后在准备使用实际模板代码进行测试或编译时,将MY_USE_TEMPLATES更改为1

启用“我的使用”模板时,引用列表的代码将导致错误(即类似“列表myList”的代码),您可以在#else语句中使用额外的伪“模板”来解决此问题。但是,在没有额外“模板”的情况下保留#else子句的好处是:引用列表时出现的错误可能会提醒您在测试代码之前打开MY#u USE_模板,从而降低出现错误的可能性。(经验表明,处理很多事情和大型项目时很容易忘记……)


但是,在使用多个这样的类型定义时一定要小心:“typedef…”。。。T'只能安全地用于该名称“T”一次;虽然您可以使用“typedef…”。。。一个类的“TYPE1”和“typedef…”。。。TYPE2’对于另一种情况,除非将不同的类型名称放入不同的名称空间,否则不能安全地对不同的类型使用相同的类型名称。(我在Visual Studio 2015中尝试过这一点。)

好的,所以它是以智能的方式工作的,而不是我做错了什么。我得习惯一下。
template<typename T>
inline T List::First()
{
    return First;
}
sdkjgisjdga->vsrsiib = 123jgi;
#if MY_USE_TEMPLATES 
template <typename T> 
#else 
typedef [**your-test-type-here**] T; 
#endif 
class List { 
... your code here ... 
}