1
模板<类型名T>类别测试{友元测试(T lhs,const Test){试验<T>r(rhs);//返回r*=lhs;}}

4智能感知:标识符“T”未定义

为什么是T型定义在第3行,而不是第4行?我的意思是,我想这不是一个真正的错误,只是一个智能感知错误。。。不管怎样,它还是有效的,但有什么问题吗?我能修一下吗?或者以某种方式去掉红色波浪线?

我正在使用visual studio 2010。我想知道这是否也发生在其他版本中?

1
  • 在朋友内部,你应该能够使用测试而不是测试<T>但我不会:这不是你的错误;这是一个智能感知错误,所以我宁愿向MS发送错误报告。 2009年11月13日9:06

2个答案2

重置为默认值
1

智能感知节目T型未定义,因为它是通用模板类型。根据您实例化类的方式,T型将是不同的类型。例如,如果您有测试<int>A,T型类型为整数,但如果你打电话测试<string>A,T型类型为一串对于该类及其方法。

2
  • 好的,但是你说的也适用于第3行。。但我没有错,这只发生在朋友身上 2009年11月12日23:47
  • 我认为这是因为friend,它不使用任何私有成员,只是friend将其与其他操作符重载分组。。。但如果我将其与类分离,我不会得到“错误”模板<typename t>class Test{}模板<typenameT>Vector3<t>&operator*(t lhs,const Vector3<t>&rhs){Vector3>t>r(rhs);return r*=lhs;}这有关系吗?最好分组? 2009年11月13日0:25
1

它似乎被类中的定义弄糊涂了。因此,将代码更改为:

模板<类型名T>类别测试{友元测试(T lhs,const Test)&rhs;};模板<类型名T>测试<T>&操作员*(T lhs,常数测试<T>&rhs){试验<T>r(rhs);}

让问题消失。

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

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策

不是你想要的答案吗?浏览标记的其他问题问你自己的问题