Pointer static method that points to no static method
我一直在尝试创建一个指针函数,指向一个方法来执行这样的操作(VisualC++):
1 2 3 4 5 6 7 8 9 10 | struct test { int tst(int a) { return a * 4; } }; // ok, this the visual C++ compiler does not accept it... (mingw accept it) int(*tstptr)(int) = (int(*)(int))&test::tst; |
然后我做了这样的事情:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | struct Dx { int SomeMethod() { return 4; } }; struct Dy { static int(*pSomeMethod)(); }; int(Dy::*pSomeMethod)() = (int( Dy::*)())&Dx::SomeMethod; |
到目前为止很好,这是没有问题的,但如果我试着打电话给她:
1 | Dy::pSomeMethod(); |
编译器返回我:
Error 1 error LNK2001: external symbol"public: static int (__stdcall
* Dy::pSomeMethod) (void)" (? PSomeMethod@Dy@@2P6GHXZA) unresolved
我不明白,因为这不是假设以东十一〔0〕他不是指以东十一〔1〕吗?
你所申报的
1 | int (*Dy::pSomeMethod)(); |
这是一个成员的
什么,你是试图做出做不会工作,因为
当鼠标右键,你能做的,只是assign的地址的函数的指针,没有使用一种铸造。 </P >
1 | int(Dy::*pSomeMethod)() = (int( Dy::*)())&Dx::SomeMethod; |
类型检查,所以好的complain从编译器。 </P >
AS的方法: </P >
1 | Dy::pSomeMethod(); |
这一_ _ cdecl。。。。。。。 但是,somemethod是一个_ _ thiscall,这意味它的真的很喜欢这个 </P >
1 | int SomeMethod( Dx &this); |
所以,linker不能find a match。 </P >
简,你不能调用非静态方法没有面向院级DX。 </P >
该类型的
你是试图做出转化到它的正常的分型,这是不可能的,因为他们是完全不同的。 </P >
"那为什么你会有这个型铸造的错误: </P >
1 2 | error C2440: 'type cast' : cannot convert from 'int (__thiscall test::* )(int)' to 'int (__cdecl *)(int)' |