【转】 http://hi.baidu.com/xgekhggjdibatxq/item/5ce5f6812121afcbb17154dc
$ make
g++-std=gnu++0x main.cpp
main.cpp:18:10: error: need 'typename' before 'ptrModel<std::vector<Data> >::Type' because 'ptrModel<std::vector<Data> >' is a dependent scope
make:***[all]Error1
/*
* main.cpp
*/
#include<vector>
#include<memory>
template<typename T>
struct ptrModel
{
typedef std::unique_ptr<T>Type;
};
template<typenameData>
struct ptrType
{
typedef ptrModel< std::vector<Data>>::TypeType;
};
int main()
{
return0;
}
The compiler told you exactly what to do. Write typename before ptrModel<std::vector<Data> >::Type, like so:
typedef typename ptrModel<std::vector<Data> >::Type Type;
The reason for this requirement is that the compiler doesn't at this point know whether ptrModel<std::vector<Data> >::Type describes a member variable or a nested type. It can't even figure that out by looking at the definition of ptrModel because there might be a specialization ofptrModel for std::vector<Data> somewhere else in the program that it hasn't gotten to yet which changes which of these things ::Type refers to. So you need to tell it explicitly.
The name ptrModel<std::vector<Data> >::Type has a "dependent scope" because it is in a scope that depends on the instantiation of a template.
本文解决了一个C++编译错误,该错误出现在尝试访问模板内的类型时。通过添加'typename'关键字解决了问题,并解释了为何需要这样做。
2045

被折叠的 条评论
为什么被折叠?



