2

可能重复:
我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?

我想创建一个模板,它接受一个类型 T 和一个参数 N 作为参数,并“给”一个 T 的第 N 级指针(例如,如果 T 是int并且 N 是2它应该给出int**

到目前为止,我的代码是:

template<class T,int N>
struct ptr
{
  typedef ptr<T*,N-1>::t t;
};

template<class T>
struct ptr<T,0>
{
  typedef T t;
};

int main()
{
  ptr<int,3>::t a; //a should be int***
}

但它给了我这个编译器错误:

source.cpp:6:11: error: need 'typename' before 'ptr<T*, (N - 1)>::t' because 'ptr<T*, (N - 1)>' is a dependent scope

这是什么意思,如何解决(如果在 C++ 中可能的话)?

4

2 回答 2

3

该错误意味着它ptr<T*, (N - 1)>::t是一个从属名称

模板定义中 used 的含义t取决于模板参数,因此编译器无法自动确定它t是类型而不是对象。

要更正错误,您必须给编译器一个提示,即按照消息建议的字面意思做:在它前面加上typename

typedef typename ptr<T*,N-1>::t t;
于 2012-09-04T12:08:33.383 回答
2
template<class T,int N>
struct ptr
{
  typedef typename ptr<T*,N-1>::t t;
};

template<class T>
struct ptr<T,0>
{
  typedef T t;
};

int main()
{
  ptr<int,3>::t a; //a should be int***
}

编译器告诉那tdependent name,所以使用typename之前ptr<T*, (N - 1)>::t

于 2012-09-04T12:07:29.583 回答