\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()

{

}