Squirrel,sqrat,绑定类时出错

Squirrel, sqrat, error when binding class

本文关键字:出错 绑定 sqrat Squirrel      更新时间:2023-10-16

我正在尝试编译一个绑定类的程序,以便可以将其与松鼠脚本一起使用。

我在Windows7下使用VS2010,并使用带有调试配置的unicode字符集编译了松鼠库和sqrat。

我得到的错误在\sqrat\sqratclass.h中,第81行:

error C2664: 'Sqrat::Class<C>::InitClass' : cannot convert parameter 1 from 'const char *' to 'const Sqrat::string &'   

有人知道我该怎么做才能让它正常工作吗?或者这是sqrat中的一个bug?非常感谢!

这是c++文件:

#include <iostream>
#include <string>
#include <sqrat.h>
class TestClass
{
public:
    int integerVar;
    std::wstring stringVar;
    void printString() { std::wcout << this->stringVar; }
};
void squirrelPrint(SQChar * text)
{
    std::wcout << text << std::endl;
}
int main()
{
    HSQUIRRELVM squirrelvm = sq_open(1024);
    Sqrat::DefaultVM::Set(squirrelvm);
    Sqrat::RootTable().Bind(L"TestClass", Sqrat::Class<TestClass>()
        .Func(L"printString", &TestClass::printString)
        .Var(L"integerVar", &TestClass::integerVar)
        .Var(L"strVar", &TestClass::stringVar));
    Sqrat::Script script;
    script.CompileFile(L"testfile.nut");
    script.Run();
}

编辑:给出错误的行是:

InitClass(typeid(*this).name());

对不起,在问这个问题之前我应该先试试这个。我下载了0.8.9版本,这是sqrat的"最新版本",正如他们主页上所说。这可能是最新的稳定版本。

无论如何,我现在已经尝试了完全相同的方法,使用来自https://github.com/Amorph/sqrat/它成功了!除了我不得不更改这条线路

return sq_throwerror(vm, "No overload matching this argument list found");

进入

return sq_throwerror(vm, _SC("No overload matching this argument list found"));