我将一个班级绑定到松鼠,我遇到了一个我不知道如何解决的问题。该类有一个函数,它将另一个类作为参数。当我选择不绑定它编译的特定函数时,但是当我这样做时会抛出错误。
类:
class A
{
public:
A(int foo) : m_foo(foo) {}
private:
int m_foo;
}
class B
{
public:
void bar(A foo) { /* Do Stuff with foo */ }
}
绑定
Sqrat::RootTable().Bind("A", Sqrat::Class<A>());
Sqrat::RootTable().Bind("B", Sqrat::Class<B>())
.Func("bar", &B::bar);
);
用作参数的类已经被Sqrat与Squirrel绑定,没有任何问题,但似乎Sqrat仍然无法识别它是什么类型。关于为什么会发生这种情况的任何想法?
答案 0 :(得分:1)
问题是函数中的参数需要作为参考传递,如下所示:
class B
{
public:
void bar(A &foo) { /* Do Stuff with foo */ }
}
这是一个问题的原因是因为作为参数传递的对象需要在其构造函数中使用参数。在从参数复制值之前,Sqrat尝试创建类的实例。使参数成为对象的引用会阻止Sqrat尝试实例化一个没有参数的无效对象。