\ga\gasf.h(20) : error C2061: syntax error : identifier 'GAGenome'
编译器错误?C2061
Visual?Studio?2012?-?Visual?C++
编译器错误?C2061语法错误:?标识符“identifier”?
编译器发现了不应在此出现的标识符。?请确保在使用?identifier?之前对其进行声明。?初始值设定项可能括在了括号中。?为避免该问题,请将声明符括在括号中或使其成为?typedef。?在编译器将表达式作为类模板参数检测时也可能导致此错误;使用?typename?告诉编译器它是一个类型。?下面的示例生成?C2061:?//?C2061.cpp
//?compile?with:?/c
template?<?A?a?> //?C2061
//?try?the?following?line?instead
//?template?<?typename?b?>
class?c{};如果将实例名传递该?typeid?则会发生?C2061:?//?C2061b.cpp
//?compile?with:?/clr
ref?struct?G?{
int?i;
};
int?main()?{
G?^?pG?=?gcnew?G;
System::Type?^?pType?=?typeid<pG>; //?C2061
System::Type?^?pType2?=?typeid<G>; //?OK
}
typename
Visual?Studio?2012?-?Visual?C++
typename
通知编译器未知标识符的类型。?
typename?identifier;
备注
仅使用此关键字在模板定义。?
此关键字,如果该名称取决于模板参数,的限定名必须使用;,如果该限定名称不是依赖,它是可选的。?有关更多信息,请参见?模板和名称转换。?
typename?可由任意类型的任何位置使用在模板声明或定义。?它在基类不允许列表,因此,除非用作模板参数传递给模板基类。?
template?<class?T>
class?C1?:?typename?T::InnerType?//?Error?-?typename?not?allowed.
{};
template?<class?T>
class?C2?:?A<typename?T::InnerType>? //?typename?OK.
{};
typename?关键字只能在?类?位置还使用在模板参数列表。?例如,下面的语句是相同的:?
template<class?T1,?class?T2>...
template<typename?T1,?typename?T2>...
示例
//?typename.cpp
template<class?T>?class?X
{
typename?T::Y?m_y; //?treat?Y?as?a?type
};
int?main()
{
}