gpt4 book ai didi

c++ - 类问题(c++ 和序言)

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:28 25 4
gpt4 key购买 nike

我正在使用 Prolog 的 C++ 接口(interface)(SWI-cpp.h 的类和方法)。为了计算出 john 喜欢 mary、emma 和 sara 的简单回溯:

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();
};

这个类工作正常,我的循环变量在每个机器人循环中递增。但是,当我运行我的主要代码时,我收到未处理的异常错误消息:

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 类声明有任何问题。

谢谢,

最佳答案

您不能像这样将指针传递给实例方法,您可能必须创建 C 函数包装器以传递给 addSensorInterpTask()。这似乎是您问题的根源,因为机器人使用不正确的参数调用该方法。此外,您应该捕获 PlException 并检查它告诉您的内容。无论如何,您的示例无法按原样编译,因为它不完整(ArRobot 是什么?)且不精确(ashley v.s. sara)。在提交问题之前,请尝试想象其他人如何能够毫不费力地重现您的问题。

关于c++ - 类问题(c++ 和序言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2690296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com