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.我想知道其他版本是否会发生这种情况?
答案 0 :(得分:1)
Intellisense将T
显示为未定义,因为它是通用模板类型。根据您实例化类的方式,T
将是不同的类型。例如,如果您有Test<int> A
,T
的类型为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),这似乎是编译器中的错误,您的代码应该是合法的。