![]() |
Hide Changes |
![]() |
|
![]() |
Recent Changes |
![]() |
Subscriptions |
![]() |
Lost and Found |
![]() |
Find References |
![]() |
Rename |
![]() |
Administration Page |
![]() |
Topic Locks |
Search |
History
10/4/2007 8:17:17 PM |
-87.248.160.134 |
7/10/2007 3:40:11 PM |
ad-remover-84.49.122.139 |
5/30/2007 12:36:19 PM |
-125.72.28.38 |
5/28/2007 6:48:08 AM |
-69.136.148.27 |
6/2/2006 11:45:41 AM |
-66.27.77.187 |
![]() |
List all versions |
Microsoft C++ compiler v7.1 fails to compile following code
class Base { public: void test() { printf("test() called\n"); } }; class Derived : public Base { void dummyToKeepCompiledFromMergingClasses() { printf("something\n"); } }; DECLARE_INSTANCE_TYPE(Derived) int main() { SqPlus::SQClassDef<Derived>("Derived") // .func(&Base::test, "test") .func(&Derived::test, "test") ; return 0; }
When trying to compile it prints the following output
../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3,P4,P5,P6,P7) const,HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5,T6,T7,T8,T9) const' from 'void (__thiscall Base::* )(void)' c:\engine\prog\3rdPartyLibs\scripts\Squirrel\sqplus\SqPlusConst.h(296) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1232) : while compiling class-template member function 'int SqPlus::DirectCallInstanceMemberFunction<Callee,Func>::Dispatch(HSQUIRRELVM)' with [ Callee=Derived, Func=void (__thiscall Base::* )(void) ] ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1314) : see reference to class template instantiation 'SqPlus::DirectCallInstanceMemberFunction<Callee,Func>' being compiled with [ Callee=Derived, Func=void (__thiscall Base::* )(void) ] ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1398) : see reference to function template instantiation 'void SqPlus::sq_pushdirectinstanceclosure<Callee,Func>(HSQUIRRELVM,const Callee &,Func,SQUnsignedInteger)' being compiled with [ Callee=Derived, Func=void (__thiscall Base::* )(void) ] ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1756) : see reference to function template instantiation 'void SqPlus::RegisterInstance<TClassType,Func>(HSQUIRRELVM,HSQOBJECT,Callee &,Func,const SQChar *)' being compiled with [ TClassType=Derived, Func=void (__thiscall Base::* )(void), Callee=Derived ] ..\..\..\..\prog\tools\test\SquirrelTest\ClassTest.cpp(233) : see reference to function template instantiation 'SqPlus::SQClassDef<TClassType> &SqPlus::SQClassDef<TClassType>::func<void(__thiscall Base::* )(void)>(Func,const SQChar *)' being compiled with [ TClassType=Derived, Func=void (__thiscall Base::* )(void) ] ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3,P4,P5,P6) const,HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5,T6,T7,T8) const' from 'void (__thiscall Base::* )(void)' c:\engine\prog\3rdPartyLibs\scripts\Squirrel\sqplus\SqPlusConst.h(291) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3,P4,P5) const,HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5,T6,T7) const' from 'void (__thiscall Base::* )(void)' c:\engine\prog\3rdPartyLibs\scripts\Squirrel\sqplus\SqPlusConst.h(286) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3,P4) const,HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5,T6) const' from 'void (__thiscall Base::* )(void)' c:\engine\prog\3rdPartyLibs\scripts\Squirrel\sqplus\SqPlusConst.h(281) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3) const,HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5) const' from 'void (__thiscall Base::* )(void)' c:\engine\prog\3rdPartyLibs\scripts\Squirrel\sqplus\SqPlusConst.h(276) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2) const,HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4) const' from 'void (__thiscall Base::* )(void)' c:\engine\prog\3rdPartyLibs\scripts\Squirrel\sqplus\SqPlusConst.h(271) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1) const,HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3) const' from 'void (__thiscall Base::* )(void)' c:\engine\prog\3rdPartyLibs\scripts\Squirrel\sqplus\SqPlusConst.h(266) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(void) const,HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(void) const' from 'void (__thiscall Base::* )(void)' c:\engine\prog\3rdPartyLibs\scripts\Squirrel\sqplus\SqPlusConst.h(261) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3,P4,P5,P6,P7),HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5,T6,T7,T8,T9)' from 'void (__thiscall Base::* )(void)' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1190) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3,P4,P5,P6),HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5,T6,T7,T8)' from 'void (__thiscall Base::* )(void)' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1185) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3,P4,P5),HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5,T6,T7)' from 'void (__thiscall Base::* )(void)' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1180) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3,P4),HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5,T6)' from 'void (__thiscall Base::* )(void)' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1175) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2,P3),HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4,T5)' from 'void (__thiscall Base::* )(void)' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1170) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1,P2),HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3,T4)' from 'void (__thiscall Base::* )(void)' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1165) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(P1),HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(T3)' from 'void (__thiscall Base::* )(void)' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1160) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2784: 'int SqPlus::Call(Callee &,RT (__thiscall Callee::* )(void),HSQUIRRELVM,int)' : could not deduce template argument for 'T2 (__thiscall Derived::* )(void)' from 'void (__thiscall Base::* )(void)' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1155) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2780: 'int SqPlus::Call(RT (__fastcall *)(P1,P2,P3,P4,P5,P6,P7),HSQUIRRELVM,int)' : expects 3 arguments - 4 provided ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1148) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2780: 'int SqPlus::Call(RT (__fastcall *)(P1,P2,P3,P4,P5,P6),HSQUIRRELVM,int)' : expects 3 arguments - 4 provided ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1143) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2780: 'int SqPlus::Call(RT (__fastcall *)(P1,P2,P3,P4,P5),HSQUIRRELVM,int)' : expects 3 arguments - 4 provided ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1138) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2780: 'int SqPlus::Call(RT (__fastcall *)(P1,P2,P3,P4),HSQUIRRELVM,int)' : expects 3 arguments - 4 provided ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1133) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2780: 'int SqPlus::Call(RT (__fastcall *)(P1,P2,P3),HSQUIRRELVM,int)' : expects 3 arguments - 4 provided ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1128) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2780: 'int SqPlus::Call(RT (__fastcall *)(P1,P2),HSQUIRRELVM,int)' : expects 3 arguments - 4 provided ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1123) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2780: 'int SqPlus::Call(RT (__fastcall *)(P1),HSQUIRRELVM,int)' : expects 3 arguments - 4 provided ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1118) : see declaration of 'SqPlus::Call' ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1249) : error C2780: 'int SqPlus::Call(RT (__fastcall *)(void),HSQUIRRELVM,int)' : expects 3 arguments - 4 provided ../../../../prog\3rdPartyLibs\scripts\Squirrel\sqplus\sqplus.h(1113) : see declaration of 'SqPlus::Call'
Create a typedef and cast as shown below:
class Base { public: void test(void) { printf("test() called\n"); } }; class Derived : public Base { void dummyToKeepCompiledFromMergingClasses() { printf("something\n"); } }; DECLARE_INSTANCE_TYPE(Derived); typedef void (Derived::*DerivedTestFunc)(void); int testDerived() { SqPlus::SQClassDef<Derived>("Derived") .func((DerivedTestFunc)&Derived::test, "test"); return 0; }