这是一个简化的例子:
template<typename T>
class MyTemplate
{
  class Inner {};
  Inner met();
};
template<typename T>
MyTemplate<T>::Inner  MyTemplate<T>::met()
{ }
我收到以下编译错误:
expected constructor, destructor, or type conversion before 'met'
我用GCC.似乎编译器不能识别MyTemplate<T>::Inner为正确的类.我怎样才能解决这个问题?我试过在typename这里和那里坚持使用关键字无济于事.现在,我可以设法编译它的唯一方法是在类声明中内联方法定义,我想避免.
Mic*_*ice 29
Clang报告如下:
error: missing 'typename' prior to dependent type name
'MyTemplate<T>::Inner' MyTemplate<T>::Inner  MyTemplate<T>::met()
^~~~~~~~~~~~~~~~~~~~ typename  1 error generated.
并放置typename在适当的位置修复它.
template<typename T>
class MyTemplate
{
  class Inner {};
  Inner met();
};
template<typename T>
typename MyTemplate<T>::Inner  MyTemplate<T>::met()
{ }
你把typename放在正确的位置了吗?如果是这样,那么这必定是G ++中的一个错误.
Pra*_*ian 11
返回类型MyTemplate::met是依赖名称,因此您需要typename在其之前添加关键字.以下编译在gcc-4.5.1上
template<typename T>
struct MyTemplate
{
  class Inner {};
  Inner met();
};
template<typename T>
typename MyTemplate<T>::Inner  MyTemplate<T>::met()
{
  return typename MyTemplate<T>::Inner();
}
int main()
{
  MyTemplate<int> foo;
  MyTemplate<int>::Inner bar = foo.met();
}
| 归档时间: | 
 | 
| 查看次数: | 21010 次 | 
| 最近记录: |