visual studio intellisense错误

时间:2009-11-12 23:21:28

标签: c++ visual-studio visual-c++ intellisense

template <typename T>
class Test {
        friend Test<T> & operator * (T lhs, const Test<T> & rhs) {
            Test<T> r(rhs);
//              return r *= lhs;
        }
}
  

4 IntelliSense:标识符“T”未定义

为什么在第3行定义T而在第4行定义?我的意思是我猜这不是一个真正的错误只是一个智能感知错误......无论如何都有效,但有什么不对吗?我可以修理吗?或者以某种方式移除红色波浪线?

我正在使用visual studio 2010.我想知道其他版本是否会发生这种情况?

2 个答案:

答案 0 :(得分:1)

Intellisense将T显示为未定义,因为它是通用模板类型。根据您实例化类的方式,T将是不同的类型。例如,如果您有Test<int> AT的类型为int,但如果您致电Test<string> A,则T类型为string上课和它的方法。

答案 1 :(得分:1)

似乎在课堂上有了这个定义而感到困惑。所以将代码更改为:

template <typename T>
class Test {

    friend Test<T> & operator * (T lhs, const Test<T> & rhs);
};

template <typename T>
Test<T> & operator * (T lhs, const Test<T> & rhs) {
    Test<T> r(rhs);
}

让问题消失。

根据我对规范的阅读(特别是11.4 / 5),这似乎是编译器中的错误,您的代码应该是合法的。