Khi biên dịch (Microsoft Visual C++ 2005 Express) đoạn mã này:Không thể chuyển đổi từ loại x thành loại x?
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>();
}
tôi nhận được một lỗi C2440:
'=': cannot convert from 'A (__cdecl *)(void)' to 'A (__cdecl *)(void)'
Điều đó không có ý nghĩa đối với tôi. Hai loại có tên trong văn bản lỗi rõ ràng là giống nhau. Ngoài ra, khi thay đổi giá trị trả về Foo
thành int
, không có lỗi như vậy.
Có phải là lỗi hoặc tôi đang làm điều gì sai?
EDIT: Vì vậy, nếu đó là một lỗi, không ai biết làm thế nào để giải quyết này? Có lẽ bằng cách sử dụng phôi? Tôi cần mã này để biên dịch ...
Đó là lỗi! [....] –
Lúc đầu, tôi nghĩ rằng đó là vì 'A (*) (void)' * khác * từ 'A (A :: *) (void)', nhưng không thể làm theo cách đó. – Griwes