Sign in to follow this  
Marius

SqPlus::Match' : none of the 43 overloads...

Recommended Posts

I think I ran in a problem. I have couple of funtions taking const pointers to parameters as: .. DECLARE_INSTANCE_TYPE(Class1); DECLARE_INSTANCE_TYPE(Class2); .. class C { ... void F(const Class1*, const Class2*); }; SQClassDef<C>(true,"C").func(&C::F,"F"); compiles with: error C2665: 'SqPlus::Match' : none of the 43 overloads could convert all the argument types f:\getae\squirrel2_1_0_sqplus_15\sqplus\sqplus.h(632): could be 'bool SqPlus::Match(SqPlus::TypeWrapper<T>,HSQUIRRELVM,int)' with [ T=bool ].... //all types. if .. void F(Class1*, Class2*); .. compiles fine.

Share this post


Link to post
Share on other sites
Thank you.

This seems to resolve half the problem. Now I have
this scenario
One param is const the other not.

And...
where 'dofile("filename.nut");' assumes the defaut directory?
If all scripts are in directory 'scripts/<>'
and the exe that loads the scripts are is un dir up
dofile("just file") does not finds the include file.
Therefore all dofile have to be nodified as:
dofile("scripts/<>") !!!. Is there a way to specify the
include paths for the engine.


[source lang=cpp]

class ClassClass
{
public:
ClassClass(){printf ("ClassClass::ClassClass \r\n");}
~ClassClass(){printf ("ClassClass::~ClassClass \r\n");}
virtual void M1(){ printf ("ClassClass::M2 \r\n");}
void Set( const Cparam* param){};
void Get( Cparam* retval){};
};








Here are the compiler VC 2003 VC7 results.

[source lang=cpp]
// with ---------------------------------------------------------------------

DECLARE_INSTANCE_TYPE(const Cparam);

errors:

test_sq.cpp(44) : warning C4114: same type qualifier used more than once
test_sq.cpp(44) : warning C4114: same type qualifier used more than once

// (const CParam) expands to 'const const' in the getname foo

test_sq.cpp(44) : error C2084: function 'void SqPlus::Push(HSQUIRRELVM,const Cparam *)' already has a body
test_sq.cpp(44) : see previous definition of 'Push'

test_sq.cpp(44) : error C2664: 'CreateNativeClassInstance' : cannot convert parameter 3 from 'const Cparam *' to 'SQUserPointer'
Conversion loses qualifiers
test_sq.cpp(44) : warning C4114: same type qualifier used more than once
test_sq.cpp(44) : error C2084: function 'void SqPlus::Push(HSQUIRRELVM,const Cparam &)' already has a body
test_sq.cpp(44) : see previous definition of 'Push'
test_sq.cpp(44) : warning C4114: same type qualifier used more than once
test_sq.cpp(44) : error C2084: function 'bool SqPlus::Match(SqPlus::TypeWrapper<T>,HSQUIRRELVM,int)' already has a body
with
[
T=const Cparam &
]
test_sq.cpp(44) : see previous definition of 'Match'
test_sq.cpp(44) : warning C4114: same type qualifier used more than once
test_sq.cpp(44) : warning C4114: same type qualifier used more than once
test_sq.cpp(44) : error C2084: function 'const Cparam &SqPlus::Get(SqPlus::TypeWrapper<T>,HSQUIRRELVM,int)' already has a body
with
[
T=const Cparam &
]
test_sq.cpp(44) : see previous definition of 'Get'
....
....
....

// with ---------------------------------------------------------------------
DECLARE_INSTANCE_TYPE(Cparam);

------ Build started: Project: test_sq, Configuration: Debug Win32 ------

Compiling...
test_sq.cpp
(1059) : error C2665: 'SqPlus::Match' : none of the 27 overloads can convert parameter 1 from type 'SqPlus::TypeWrapper<T>'
with
[
T=const Cparam *
]
(632): could be 'bool SqPlus::Match(SqPlus::TypeWrapper<T>,HSQUIRRELVM,int)'
..........
..........
..........
with
[

with
[
Callee=ClassClass,
Func=void (__thiscall ClassClass::* )(const Cparam *)
]
(1457) : see reference to function template instantiation 'void SqPlus::sq_pushdirectinstanceclosure<Callee,Func>(HSQUIRRELVM,const Callee &,Func,SQUnsignedInteger)' being compiled
with
[
Callee=ClassClass,
Func=void (__thiscall ClassClass::* )(const Cparam *)
]
(1852) : see reference to function template instantiation 'void SqPlus::RegisterInstance<TClassType,Func>(HSQUIRRELVM,HSQOBJECT,Callee &,Func,const SQChar *)' being compiled
with
[
TClassType=ClassClass,
Func=void (__thiscall ClassClass::* )(const Cparam *),
Callee=ClassClass
]
test_sq.cpp(97) : see reference to function template instantiation 'SqPlus::SQClassDef<TClassType> &SqPlus::SQClassDef<TClassType>::func<void(__thiscall ClassClass::* )(const Cparam *)>(Func,const SQChar *)' being compiled
with
[
TClassType=ClassClass,
Func=void (__thiscall ClassClass::* )(const Cparam *)
]
(1061) : error C2665: 'SqPlus::Get' : none of the 29 overloads can convert parameter 1 from type 'SqPlus::TypeWrapper<T>'
with
[
T=const Cparam *
]

test_sq - 2 error(s), 0 warning(s)

/*
and SQPLUS_CONST_OPT is defined because the reference macro jumps to
#define DECLARE_INSTANCE_TYPE(TYPE) DECLARE_INSTANCE_TYPE_NAME_(TYPE,TYPE)
*/


#ifndef SQPLUS_CONST_OPT
#define DECLARE_INSTANCE_TYPE(TYPE) DECLARE_INSTANCE_TYPE_NAME_(TYPE,TYPE)








[Edited by - Marius on June 6, 2006 12:10:35 PM]

Share this post


Link to post
Share on other sites
re: file paths: I use paths relative to the current directory. You can write script functions and/or bind C++ functions to return strings to the current directory, absolute directory, etc., if needed:

dofile("Scripts/commonInit.nut");
// ScriptDir has been initialized to the full path to the script directory:
dofile(ScriptDir+"commonInit.nut");

re: additional issues: perhaps ask the question(s) on the Squirrel forum. If the problem has not been previously noted and solved, perhaps post the (general/complete) solution if you can find one.

Share this post


Link to post
Share on other sites
I post at squirel forum home page
the workaround for sqplus to suport:

exporting Interfaces,
exporting Const and Volatile (of same type) paramaters in exported methods.
as:
class{
method(const Obj*, Obj*);
foo_set(const Obj*);
foo_get(Obj*);
}
.

Also I worked out include files paths for dofile("bla").
If interested please let me know. Is a functional fix
not quite 'academique'.

I post there under the name of 'suiram'

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this