我正在使用 Prolog 的 C++ 接口(SWI-cpp.h 的类和方法)。为了制定一个约翰喜欢玛丽、艾玛和莎拉的简单回溯:
likes(john, mary).
likes(john, emma).
likes(john, ashley).
我可以这样做:
{
PlFrame fr;
PlTermv av(2);
av[0] = PlCompound("john");
PlQuery q("likes", av);
while (q.next_solution())
{
cout << (char*)av[1] << endl;
}
}
这在单独的代码中有效,因此语法是正确的。但我也试图让这个简单的回溯在一个类中工作:
class UserTaskProlog
{
public:
UserTaskProlog(ArRobot* r);
~UserTaskProlog();
protected:
int cycles;
char* argv[1];
ArRobot* robot;
void logTask();
};
此类工作正常,我的周期变量在每个机器人周期递增。但是,当我运行我的主代码时,我收到了 Unhandled Exception 错误消息:
UserTaskProlog::UserTaskProlog(ArRobot* r) : robotTaskFunc(this, &UserTaskProlog::logTask)
{
cycles = 0;
PlEngine e(argv[0]);
PlCall("consult('myFile.pl')");
robot->addSensorInterpTask("UserTaskProlog", 50, &robotTaskFunc);
}
UserTaskProlog::~UserTaskProlog()
{
robot->remSensorInterpTask(&robotTaskFunc);
// Do I need a destructor here for pl?
}
void UserTaskProlog::logTask()
{
cycles++;
cout << cycles;
{
PlFrame fr;
PlTermv av(2);
av[0] = PlCompound("john");
PlQuery q("likes", av);
while (q.next_solution())
{
cout << (char*)av[1] << endl;
}
}
}
我有 PlFrame 的左括号和右括号。我有我的框架、我的查询等... 回溯并打印出 mary、emma 和 sara 的完全相同的代码。我在这里错过了什么,我收到一条错误消息?
以下是我认为代码应该做的事情:我希望 mary、emma 和 sara 打印一次,每次循环递增。但是,它会自动打开 SWI-cpp.h 文件并指向 PlFrame 类。它想告诉我什么?我看不出我的 PlFrame 类声明有什么问题。
谢谢,