Prolog (SWI-cpp.h의 클래스 및 메서드)에 C++ 인터페이스를 사용하고 있습니다. 존은 메리 엠마와 사라 좋아하는 간단한 되돌아 운동의 경우 :클래스 문제 (C++ 및 프롤로그)
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 내 개폐 브라켓이 : 내 주요 코드를 실행할 때, 나는 처리되지 않은 예외 오류 메시지가 표시됩니다. 나는 내 프레임, 내 쿼리 등을 가지고있다. 똑같은 코드가 메리와 엠마와 새라를 역 추적하고 프린트한다. 내가 여기에 누락되어 오류 메시지가 표시됩니까?
다음은 코드가해야한다고 생각하는 것입니다. 매리와 엠마와 새라가 한 번씩 인쇄 될 때마다주기가 증가 할 것으로 예상합니다. 그러나 SWI-cpp.h 파일을 자동으로 열고 PlFrame 클래스를 가리 킵니다. 나에게 무엇을 말하려고 하는가? 내 PlFrame 클래스 선언에 잘못된 것이 보이지 않습니다. 당신은이 같은 인스턴스 메서드에 대한 포인터를 전달할 수 없습니다
감사 마트. 그것은 내가 지금 바로 잡는 오타였다. ArRobot은 ARIA의 로봇 객체 (http://robots.mobilerobots.com/wiki/Main_Page)를 참조합니다. 오류가 포함되어 있다고 생각되는 코드 스 니펫을 제출했습니다. 당신이 절대적으로 유효한 포인트를 가지고 있지만 전체 코드를 제출하면 (그래서 내 문제를 재현 할 수있을 것입니다.) 시청자를 끌 수도 있습니다. 다른 의견을 확인하고 내가 할 수있는 일을 볼 것입니다. 고맙습니다, – Joshua