智能感知不使用模板的VS2012最终C ++(Intellisense not working wi

2019-08-02 10:27发布

智能感知与我的工作VS得很厉害......

当我用C编码我++它工作100%的罚款,直到我开始使用模板,那么它只是停止工作完全停止检测错误和不自动完成在所有情况下。

我倾向于相信这与一些我与我的代码,打破它做的事。

于是我开始在这一个结构创建一个类:

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:我已经尝试重置配置。

编辑:忘了说,如果我不我.h文件中使用的模板,然后智能感知正常工作。

Answer 1:

模板需要实例化之前,你可以明确地说,他们包含的内容。 例如,你的First->段指向一个List<T>::Node ,这显然是依赖于准确的T

当然,智能感知在这个简单的例子可以清楚地由刚刚替换列出成员T==int了一会儿。 但考虑更糟的是:智能感知不知道成员(就像现在),或在您最需要的疑难案件的智能感知错误的猜测?



Answer 2:

我这个答案有点晚了,也许OP不工作在这个代码了,但我认为这可能还是帮助别人谁是搜索模板和智能感知。

有一两件事你可以试试 - 如果你希望能够看到你的错别字和错误在您键入,但如果你想你的代码模板能够 - 是使用#如果 - #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年这似乎工作。 您可以定义MY_USE_TEMPLATES为0(使用#定义),发展与智能感知和自动完成,等你的代码(所以你做出错误减少了),然后更改MY_USE_TEMPLATES为1,当您准备测试或编译实际的模板代码。

虽然你有MY_USE_TEMPLATES打开,代码引用您的列表会出现错误(即代码,如“列表myList中”),并且可以解决与的#else语句中额外的虚拟“模板”。 然而,要离开#else子句没有额外的“模板”的好处是:你的参考名单,当你的错误可能会竭诚为您服务,提醒测试代码,减少错误的概率前打开MY_USE_TEMPLATES。 (经验表明,它很容易处理很多事情,大的项目时,忘了...)

千万要小心使用多个这样的类型定义,但是:在“...的typedef T”只能安全地使用一次,那名“T”; 虽然你可以使用“的typedef ... TYPE1”一类“的typedef ... TYPE2”另外,你不能安全,除非你把不同的类型名称为单独的命名空间使用相同类型的名称不同的类型。 (我在Visual Studio 2015年尝试这样做)



文章来源: Intellisense not working with templates VS2012 ultimate c++