【发布时间】:2011-12-23 15:31:24
【问题描述】:
编译(Microsoft Visual C++ 2005 Express)这段代码时:
struct A
{
template< typename T > static A Foo( void ) { return A(); }
struct S
{
template< typename T > static S GetInstance( void )
{
S Result;
Result.m_funcFoo = &A::Foo< T >;
return Result;
}
A ( *m_funcFoo )( void );
};
};
int main(int argc, char* argv[])
{
A::S::GetInstance< int >();
}
我收到 C2440 错误:
'=': 无法从'A (__cdecl *)(void)' 转换为'A (__cdecl *)(void)'
这对我来说没有意义。错误文本中命名的两种类型显然是相同的。
还有,把Foo的返回值改成int,也没有这个错误。
这是一个错误还是我做错了什么?
编辑: 那么,如果这是一个错误,有谁知道如何解决这个问题?也许通过使用演员表?我需要这段代码来编译...
【问题讨论】:
-
一开始我还以为是
A (*)(void)和A (A::*)(void)不同,没想到那样做。
标签: c++ visual-studio function-pointers