Я связываю класс с белкой, и я столкнулся с проблемой, которую не знаю, как решить. У класса есть функция, которая принимает другой класс в качестве аргумента. Когда я выбираю не связывать эту конкретную функцию, она компилируется, но когда я это делаю, она выдает ошибку.
Классы:
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 без проблем, однако кажется, что Sqrat все еще не может распознать, какой это тип. Любые идеи относительно того, почему это происходит?
Проблема заключалась в том, что аргумент в функции нужно было передать как ссылку:
class B
{
public:
void bar(A &foo) { /* Do Stuff with foo */ }
}
Причина, по которой это было проблемой, заключалась в том, что объект, который был передан в качестве аргумента, требовал аргумента в своем конструкторе. Sqrat пытается создать и создать экземпляр класса, прежде чем копировать значения из аргументов. Создание аргумента в виде ссылки на объект не позволило Sqrat попытаться создать недействительный объект без аргументов.