Как связать функцию с помощью Sqrat, которая принимает класс в качестве аргумента?

Я связываю класс с белкой, и я столкнулся с проблемой, которую не знаю, как решить. У класса есть функция, которая принимает другой класс в качестве аргумента. Когда я выбираю не связывать эту конкретную функцию, она компилируется, но когда я это делаю, она выдает ошибку.

Классы:

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 все еще не может распознать, какой это тип. Любые идеи относительно того, почему это происходит?

-1

Решение

Проблема заключалась в том, что аргумент в функции нужно было передать как ссылку:

class B
{
public:
void bar(A &foo) { /* Do Stuff with foo */ }
}

Причина, по которой это было проблемой, заключалась в том, что объект, который был передан в качестве аргумента, требовал аргумента в своем конструкторе. Sqrat пытается создать и создать экземпляр класса, прежде чем копировать значения из аргументов. Создание аргумента в виде ссылки на объект не позволило Sqrat попытаться создать недействительный объект без аргументов.

1

Другие решения


По вопросам рекламы [email protected]