Leap Motion在C ++中对未定义的引用进行示例

时间:2015-01-18 06:44:29

标签: c++ undefined-reference leap-motion

我在Linux上下载了SDK并将所需文件复制到我想运行的文件的目录中。但是,每次我尝试编译我的程序时,它都会给我这个错误:

    /tmp/ccWcnfz5.o: In function `SampleListener::onConnect(Leap::Controller const&)':
    Sample.cpp:(.text+0x6c): undefined reference to `Leap::Controller::enableGesture(Leap::Gesture::Type, bool) const'
    Sample.cpp:(.text+0x82): undefined reference to `Leap::Controller::enableGesture(Leap::Gesture::Type, bool) const'
    Sample.cpp:(.text+0x98): undefined reference to `Leap::Controller::enableGesture(Leap::Gesture::Type, bool) const'
    Sample.cpp:(.text+0xae): undefined reference to `Leap::Controller::enableGesture(Leap::Gesture::Type, bool) const'
    /tmp/ccWcnfz5.o: In function `SampleListener::onFrame(Leap::Controller const&)':
    Sample.cpp:(.text+0x14c): undefined reference to `Leap::Controller::frame(int) const'
    Sample.cpp:(.text+0x165): undefined reference to `Leap::Frame::gestures() const'
    Sample.cpp:(.text+0x174): undefined reference to `Leap::GestureList::count() const'
    Sample.cpp:(.text+0x18f): undefined reference to `Leap::Frame::tools() const'
    Sample.cpp:(.text+0x19e): undefined reference to `Leap::ToolList::count() const'
    Sample.cpp:(.text+0x1ba): undefined reference to `Leap::Frame::fingers() const'
    Sample.cpp:(.text+0x1d3): undefined reference to `Leap::FingerList::extended() const'
    Sample.cpp:(.text+0x1e2): undefined reference to `Leap::FingerList::count() const'
    Sample.cpp:(.text+0x1fe): undefined reference to `Leap::Frame::hands() const'
    Sample.cpp:(.text+0x20d): undefined reference to `Leap::HandList::count() const'
    Sample.cpp:(.text+0x21f): undefined refe g++ Sample.cpp -o Sample
    /tmp/ccWcnfz5.o: In function `SampleListener::onConnect(Leap::Controller const&)':
    Sample.cpp:(.text+0x6c): undefined reference to `Leap::Controller::enableGesture(Leap::Gesture::Type, bool) const'
    Sample.cpp:(.text+0x82): undefined reference to `Leap::Controller::enableGesture(Leap::Gesture::Type, bool) const'
    Sample.cpp:(.text+0x98): undefined reference to `Leap::Controller::enableGesture(Leap::Gesture::Type, bool) const'
    Sample.cpp:(.text+0xae): undefined reference to `Leap::Controller::enableGesture(Leap::Gesture::Type, bool) const'
    /tmp/ccWcnfz5.o: In function `SampleListener::onFrame(Leap::Controller const&)':
    Sample.cpp:(.text+0x14c): undefined reference to `Leap::Controller::frame(int) const'
    Sample.cpp:(.text+0x165): undefined reference to `Leap::Frame::gestures() const'
    Sample.cpp:(.text+0x174): undefined reference to 
    /tmp/ccWcnfz5.o: In function `Leap::Device::toString() const':
    Sample.cpp:(.text._ZNK4Leap6Device8toStringEv[_ZNK4Leap6Device8toStringEv]+0x19): undefined reference to `Leap::Device::toCString() const'
    Sample.cpp:(.text._ZNK4Leap6Device8toStringEv[_ZNK4Leap6Device8toStringEv]+0x58): undefined reference to `Leap::Interface::deleteCString(char const*)'
    /tmp/ccWcnfz5.o: In function `Leap::Pointable::~Pointable()':
    Sample.cpp:(.text._ZN4Leap9PointableD2Ev[_ZN4Leap9PointableD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::Gesture::~Gesture()':
    Sample.cpp:(.text._ZN4Leap7GestureD2Ev[_ZN4Leap7GestureD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::ConstListIterator<Leap::HandList, Leap::Hand>::operator*() const':
    Sample.cpp:(.text._ZNK4Leap17ConstListIteratorINS_8HandListENS_4HandEEdeEv[_ZNK4Leap17ConstListIteratorINS_8HandListENS_4HandEEdeEv]+0x29): undefined reference to `Leap::HandList::operator[](int) const'
    /tmp/ccWcnfz5.o: In function `Leap::ConstListIterator<Leap::FingerList, Leap::Finger>::operator*() const':
    Sample.cpp:(.text._ZNK4Leap17ConstListIteratorINS_10FingerListENS_6FingerEEdeEv[_ZNK4Leap17ConstListIteratorINS_10FingerListENS_6FingerEEdeEv]+0x29): undefined reference to `Leap::FingerList::operator[](int) const'
    /tmp/ccWcnfz5.o: In function `Leap::ConstListIterator<Leap::ToolList, Leap::Tool>::operator*() const':
    Sample.cpp:(.text._ZNK4Leap17ConstListIteratorINS_8ToolListENS_4ToolEEdeEv[_ZNK4Leap17ConstListIteratorINS_8ToolListENS_4ToolEEdeEv]+0x29): undefined reference to `Leap::ToolList::operator[](int) const'
    /tmp/ccWcnfz5.o: In function `Leap::Frame::~Frame()':
    Sample.cpp:(.text._ZN4Leap5FrameD2Ev[_ZN4Leap5FrameD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::DeviceList::~DeviceList()':
    Sample.cpp:(.text._ZN4Leap10DeviceListD2Ev[_ZN4Leap10DeviceListD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::GestureList::~GestureList()':
    Sample.cpp:(.text._ZN4Leap11GestureListD2Ev[_ZN4Leap11GestureListD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::HandList::~HandList()':
    Sample.cpp:(.text._ZN4Leap8HandListD2Ev[_ZN4Leap8HandListD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::ToolList::~ToolList()':
    Sample.cpp:(.text._ZN4Leap8ToolListD2Ev[_ZN4Leap8ToolListD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o:Sample.cpp:(.text._ZN4Leap10FingerListD2Ev[_ZN4Leap10FingerListD5Ev]+0x1f): more undefined references to `Leap::Interface::~Interface()' follow
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap5FrameE[_ZTIN4Leap5FrameE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap10DeviceListE[_ZTIN4Leap10DeviceListE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap11GestureListE[_ZTIN4Leap11GestureListE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap8HandListE[_ZTIN4Leap8HandListE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap8ToolListE[_ZTIN4Leap8ToolListE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap10FingerListE[_ZTIN4Leap10FingerListE]+0x10): more undefined references to `typeinfo for Leap::Interface' follow
    /tmp/ccWcnfz5.o: In function `Leap::Device::~Device()':
    Sample.cpp:(.text._ZN4Leap6DeviceD2Ev[_ZN4Leap6DeviceD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap6DeviceE[_ZTIN4Leap6DeviceE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    collect2: error: ld returned 1 exit status
    anthony@anthony-VGN-NW240F:~/Documents/Programming/Leap-Motion/LeapDeveloperKit_2.2.2+24469_linux/LeapSDK/samples/C++$ 
    rence to `Leap::Frame::timestamp() const'
    Sample.cpp:(.text+0x231): undefined reference to `Leap::Frame::id() const'
    Sample.cpp:(.text+0x33e): undefined reference to `Leap::Frame::hands() const'
    Sample.cpp:(.text+0x34d): undefined reference to `Leap::HandList::begin() const'
    Sample.cpp:(.text+0x394): undefined reference to `Leap::Hand::isLeft() const'
    Sample.cpp:(.text+0x3dc): undefined reference to `Leap::Hand::palmPosition() const'
    Sample.cpp:(.text+0x3eb): undefined reference to `Leap::Hand::id() const'
    Sample.cpp:(.text+0x4b3): undefined reference to `Leap::Hand::palmNormal() const'
    Sample.cpp:(.text+0x4cc): undefined reference to `Leap::Hand::direction() const'
    Sample.cpp:(.text+0x631): undefined reference to `Leap::Hand::arm() const'
    Sample.cpp:(.text+0x644): undefined reference to `Leap::Arm::elbowPosition() const'
    Sample.cpp:(.text+0x657): undefined reference to `Leap::Arm::wristPosition() const'
    Sample.cpp:(.text+0x66a): undefined reference to `Leap::Arm::direction() const'
    Sample.cpp:(.text+0x73c): undefined reference to `Leap::Hand::fingers() const'
    Sample.cpp:(.text+0x748): undefined reference to `Leap::FingerList::begin() const'
    Sample.cpp:(.text+0x774): undefined reference to `Leap::Pointable::width() const'
    Sample.cpp:(.text+0x78e): undefined reference to `Leap::Pointable::length() const'
    Sample.cpp:(.text+0x7a9): undefined reference to `Leap::Pointable::id() const'
    Sample.cpp:(.text+0x7b8): undefined reference to `Leap::Finger::type() const'
    Sample.cpp:(.text+0x8cb): undefined reference to `Leap::Finger::bone(Leap::Bone::Type) const'
    Sample.cpp:(.text+0x8e1): undefined reference to `Leap::Bone::direction() const'
    Sample.cpp:(.text+0x8f7): undefined reference to `Leap::Bone::nextJoint() const'
    Sample.cpp:(.text+0x90d): undefined reference to `Leap::Bone::prevJoint() const'
    Sample.cpp:(.text+0xa3d): undefined reference to `Leap::FingerList::end() const'
    Sample.cpp:(.text+0xabd): undefined reference to `Leap::HandList::end() const'
    Sample.cpp:(.text+0xb05): undefined reference to `Leap::Frame::tools() const'
    Sample.cpp:(.text+0xb14): undefined reference to `Leap::ToolList::begin() const'
    Sample.cpp:(.text+0xb47): undefined reference to `Leap::Pointable::direction() const'
    Sample.cpp:(.text+0xb5a): undefined reference to `Leap::Pointable::tipPosition() const'
    Sample.cpp:(.text+0xb66): undefined reference to `Leap::Pointable::id() const'
    Sample.cpp:(.text+0xc46): undefined reference to `Leap::ToolList::end() const'
    Sample.cpp:(.text+0xc82): undefined reference to `Leap::Frame::gestures() const'
    Sample.cpp:(.text+0xcb0): undefined reference to `Leap::GestureList::operator[](int) const'
    Sample.cpp:(.text+0xcbf): undefined reference to `Leap::Gesture::type() const'
    Sample.cpp:(.text+0xd04): undefined reference to `Leap::CircleGesture::CircleGesture(Leap::Gesture const&)'
    Sample.cpp:(.text+0xd26): undefined reference to `Leap::CircleGesture::normal() const'
    Sample.cpp:(.text+0xd39): undefined reference to `Leap::CircleGesture::pointable() const'
    Sample.cpp:(.text+0xd4f): undefined reference to `Leap::Pointable::direction() const'
    Sample.cpp:(.text+0xdc5): undefined reference to `Leap::Gesture::state() const'
    Sample.cpp:(.text+0xddf): undefined reference to `Leap::Gesture::id() const'
    Sample.cpp:(.text+0xdfc): undefined reference to `Leap::Controller::frame(int) const'
    Sample.cpp:(.text+0xe11): undefined reference to `Leap::Frame::gesture(int) const'
    Sample.cpp:(.text+0xe24): undefined reference to `Leap::CircleGesture::CircleGesture(Leap::Gesture const&)'
    Sample.cpp:(.text+0xe48): undefined reference to `Leap::CircleGesture::progress() const'
    Sample.cpp:(.text+0xe5c): undefined reference to `Leap::CircleGesture::progress() const'
    Sample.cpp:(.text+0xeb7): undefined reference to `Leap::CircleGesture::radius() const'
    Sample.cpp:(.text+0xed1): undefined reference to `Leap::CircleGesture::progress() const'
    Sample.cpp:(.text+0xeef): undefined reference to `Leap::Gesture::state() const'
    Sample.cpp:(.text+0xf0b): undefined reference to `Leap::Gesture::id() const'
    Sample.cpp:(.text+0x1060): undefined reference to `Leap::SwipeGesture::SwipeGesture(Leap::Gesture const&)'
    Sample.cpp:(.text+0x106c): undefined reference to `Leap::SwipeGesture::speed() const'
    Sample.cpp:(.text+0x108d): undefined reference to `Leap::SwipeGesture::direction() const'
    Sample.cpp:(.text+0x109c): undefined reference to `Leap::Gesture::state() const'
    Sample.cpp:(.text+0x10b8): undefined reference to `Leap::Gesture::id() const'
    Sample.cpp:(.text+0x11ba): undefined reference to `Leap::KeyTapGesture::KeyTapGesture(Leap::Gesture const&)'
    Sample.cpp:(.text+0x11cd): undefined reference to `Leap::KeyTapGesture::direction() const'
    Sample.cpp:(.text+0x11e0): undefined reference to `Leap::KeyTapGesture::position() const'
    Sample.cpp:(.text+0x11ef): undefined reference to `Leap::Gesture::state() const'
    Sample.cpp:(.text+0x120b): undefined reference to `Leap::Gesture::id() const'
    Sample.cpp:(.text+0x1304): undefined reference to `Leap::ScreenTapGesture::ScreenTapGesture(Leap::Gesture const&)'
    Sample.cpp:(.text+0x1317): undefined reference to `Leap::ScreenTapGesture::direction() const'
    Sample.cpp:(.text+0x132a): undefined reference to `Leap::ScreenTapGesture::position() const'
    Sample.cpp:(.text+0x1339): undefined reference to `Leap::Gesture::state() const'
    Sample.cpp:(.text+0x1355): undefined reference to `Leap::Gesture::id() const'
    Sample.cpp:(.text+0x14d0): undefined reference to `Leap::GestureList::count() const'
    Sample.cpp:(.text+0x14fc): undefined reference to `Leap::Frame::hands() const'
    Sample.cpp:(.text+0x150d): undefined reference to `Leap::HandList::isEmpty() const'
    Sample.cpp:(.text+0x1523): undefined reference to `Leap::GestureList::isEmpty() const'
    /tmp/ccWcnfz5.o: In function `SampleListener::onDeviceChange(Leap::Controller const&)':
    Sample.cpp:(.text+0x1a3c): undefined reference to `Leap::Controller::devices() const'
    Sample.cpp:(.text+0x1a5e): undefined reference to `Leap::DeviceList::operator[](int) const'
    Sample.cpp:(.text+0x1aca): undefined reference to `Leap::DeviceList::operator[](int) const'
    Sample.cpp:(.text+0x1ad6): undefined reference to `Leap::Device::isStreaming() const'
    Sample.cpp:(.text+0x1b29): undefined reference to `Leap::DeviceList::count() const'
    /tmp/ccWcnfz5.o: In function `main':
    Sample.cpp:(.text+0x1c1e): undefined reference to `Leap::Controller::Controller()'
    Sample.cpp:(.text+0x1c31): undefined reference to `Leap::Controller::addListener(Leap::Listener&)'
    Sample.cpp:(.text+0x1c64): undefined reference to `Leap::Controller::setPolicy(Leap::Controller::PolicyFlag) const'
    Sample.cpp:(.text+0x1c9d): undefined reference to `Leap::Controller::removeListener(Leap::Listener&)'
    Sample.cpp:(.text+0x1cae): undefined reference to `Leap::Controller::~Controller()'
    Sample.cpp:(.text+0x1ccd): undefined reference to `Leap::Controller::~Controller()'
    /tmp/ccWcnfz5.o: In function `Leap::Device::toString() const':
    Sample.cpp:(.text._ZNK4Leap6Device8toStringEv[_ZNK4Leap6Device8toStringEv]+0x19): undefined reference to `Leap::Device::toCString() const'
    Sample.cpp:(.text._ZNK4Leap6Device8toStringEv[_ZNK4Leap6Device8toStringEv]+0x58): undefined reference to `Leap::Interface::deleteCString(char const*)'
    /tmp/ccWcnfz5.o: In function `Leap::Pointable::~Pointable()':
    Sample.cpp:(.text._ZN4Leap9PointableD2Ev[_ZN4Leap9PointableD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::Gesture::~Gesture()':
    Sample.cpp:(.text._ZN4Leap7GestureD2Ev[_ZN4Leap7GestureD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::ConstListIterator<Leap::HandList, Leap::Hand>::operator*() const':
    Sample.cpp:(.text._ZNK4Leap17ConstListIteratorINS_8HandListENS_4HandEEdeEv[_ZNK4Leap17ConstListIteratorINS_8HandListENS_4HandEEdeEv]+0x29): undefined reference to `Leap::HandList::operator[](int) const'
    /tmp/ccWcnfz5.o: In function `Leap::ConstListIterator<Leap::FingerList, Leap::Finger>::operator*() const':
    Sample.cpp:(.text._ZNK4Leap17ConstListIteratorINS_10FingerListENS_6FingerEEdeEv[_ZNK4Leap17ConstListIteratorINS_10FingerListENS_6FingerEEdeEv]+0x29): undefined reference to `Leap::FingerList::operator[](int) const'
    /tmp/ccWcnfz5.o: In function `Leap::ConstListIterator<Leap::ToolList, Leap::Tool>::operator*() const':
    Sample.cpp:(.text._ZNK4Leap17ConstListIteratorINS_8ToolListENS_4ToolEEdeEv[_ZNK4Leap17ConstListIteratorINS_8ToolListENS_4ToolEEdeEv]+0x29): undefined reference to `Leap::ToolList::operator[](int) const'
    /tmp/ccWcnfz5.o: In function `Leap::Frame::~Frame()':
    Sample.cpp:(.text._ZN4Leap5FrameD2Ev[_ZN4Leap5FrameD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::DeviceList::~DeviceList()':
    Sample.cpp:(.text._ZN4Leap10DeviceListD2Ev[_ZN4Leap10DeviceListD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::GestureList::~GestureList()':
    Sample.cpp:(.text._ZN4Leap11GestureListD2Ev[_ZN4Leap11GestureListD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::HandList::~HandList()':
    Sample.cpp:(.text._ZN4Leap8HandListD2Ev[_ZN4Leap8HandListD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o: In function `Leap::ToolList::~ToolList()':
    Sample.cpp:(.text._ZN4Leap8ToolListD2Ev[_ZN4Leap8ToolListD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o:Sample.cpp:(.text._ZN4Leap10FingerListD2Ev[_ZN4Leap10FingerListD5Ev]+0x1f): more undefined references to `Leap::Interface::~Interface()' follow
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap5FrameE[_ZTIN4Leap5FrameE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap10DeviceListE[_ZTIN4Leap10DeviceListE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap11GestureListE[_ZTIN4Leap11GestureListE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap8HandListE[_ZTIN4Leap8HandListE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap8ToolListE[_ZTIN4Leap8ToolListE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap10FingerListE[_ZTIN4Leap10FingerListE]+0x10): more undefined references to `typeinfo for Leap::Interface' follow
    /tmp/ccWcnfz5.o: In function `Leap::Device::~Device()':
    Sample.cpp:(.text._ZN4Leap6DeviceD2Ev[_ZN4Leap6DeviceD5Ev]+0x1f): undefined reference to `Leap::Interface::~Interface()'
    /tmp/ccWcnfz5.o:(.rodata._ZTIN4Leap6DeviceE[_ZTIN4Leap6DeviceE]+0x10): undefined reference to `typeinfo for Leap::Interface'
    collect2: error: ld returned 1 exit status

代码:

#include <iostream>
#include <string.h>
#include "Leap.h"

using namespace Leap;


class SampleListener : public Listener {
  public:
    virtual void onInit(const Controller&);
    virtual void onConnect(const Controller&);
    virtual void onDisconnect(const Controller&);
    virtual void onExit(const Controller&);
    virtual void onFrame(const Controller&);
    virtual void onFocusGained(const Controller&);
    virtual void onFocusLost(const Controller&);
    virtual void onDeviceChange(const Controller&);
    virtual void onServiceConnect(const Controller&);
    virtual void onServiceDisconnect(const Controller&);

  private:
};

const std::string fingerNames[] = {"Thumb", "Index", "Middle", "Ring", "Pinky"};
const std::string boneNames[] = {"Metacarpal", "Proximal", "Middle", "Distal"};
const std::string stateNames[] = {"STATE_INVALID", "STATE_START", "STATE_UPDATE", "STATE_END"};

void SampleListener::onInit(const Controller& controller) {
  std::cout << "Initialized" << std::endl;
}

void SampleListener::onConnect(const Controller& controller) {
  std::cout << "Connected" << std::endl;
  controller.enableGesture(Gesture::TYPE_CIRCLE);
  controller.enableGesture(Gesture::TYPE_KEY_TAP);
  controller.enableGesture(Gesture::TYPE_SCREEN_TAP);
  controller.enableGesture(Gesture::TYPE_SWIPE);
}

void SampleListener::onDisconnect(const Controller& controller) {
  // Note: not dispatched when running in a debugger.
  std::cout << "Disconnected" << std::endl;
}

void SampleListener::onExit(const Controller& controller) {
  std::cout << "Exited" << std::endl;
}

void SampleListener::onFrame(const Controller& controller) {
  // Get the most recent frame and report some basic information
  const Frame frame = controller.frame();
  std::cout << "Frame id: " << frame.id()
            << ", timestamp: " << frame.timestamp()
            << ", hands: " << frame.hands().count()
            << ", extended fingers: " << frame.fingers().extended().count()
            << ", tools: " << frame.tools().count()
            << ", gestures: " << frame.gestures().count() << std::endl;

  HandList hands = frame.hands();
  for (HandList::const_iterator hl = hands.begin(); hl != hands.end(); ++hl) {
    // Get the first hand
    const Hand hand = *hl;
    std::string handType = hand.isLeft() ? "Left hand" : "Right hand";
    std::cout << std::string(2, ' ') << handType << ", id: " << hand.id()
              << ", palm position: " << hand.palmPosition() << std::endl;
    // Get the hand's normal vector and direction
    const Vector normal = hand.palmNormal();
    const Vector direction = hand.direction();

    // Calculate the hand's pitch, roll, and yaw angles
    std::cout << std::string(2, ' ') <<  "pitch: " << direction.pitch() * RAD_TO_DEG << " degrees, "
              << "roll: " << normal.roll() * RAD_TO_DEG << " degrees, "
              << "yaw: " << direction.yaw() * RAD_TO_DEG << " degrees" << std::endl;

    // Get the Arm bone
    Arm arm = hand.arm();
    std::cout << std::string(2, ' ') <<  "Arm direction: " << arm.direction()
              << " wrist position: " << arm.wristPosition()
              << " elbow position: " << arm.elbowPosition() << std::endl;

    // Get fingers
    const FingerList fingers = hand.fingers();
    for (FingerList::const_iterator fl = fingers.begin(); fl != fingers.end(); ++fl) {
      const Finger finger = *fl;
      std::cout << std::string(4, ' ') <<  fingerNames[finger.type()]
                << " finger, id: " << finger.id()
                << ", length: " << finger.length()
                << "mm, width: " << finger.width() << std::endl;

      // Get finger bones
      for (int b = 0; b < 4; ++b) {
        Bone::Type boneType = static_cast<Bone::Type>(b);
        Bone bone = finger.bone(boneType);
        std::cout << std::string(6, ' ') <<  boneNames[boneType]
                  << " bone, start: " << bone.prevJoint()
                  << ", end: " << bone.nextJoint()
                  << ", direction: " << bone.direction() << std::endl;
      }
    }
  }

  // Get tools
  const ToolList tools = frame.tools();
  for (ToolList::const_iterator tl = tools.begin(); tl != tools.end(); ++tl) {
    const Tool tool = *tl;
    std::cout << std::string(2, ' ') <<  "Tool, id: " << tool.id()
              << ", position: " << tool.tipPosition()
              << ", direction: " << tool.direction() << std::endl;
  }

  // Get gestures
  const GestureList gestures = frame.gestures();
  for (int g = 0; g < gestures.count(); ++g) {
    Gesture gesture = gestures[g];

    switch (gesture.type()) {
      case Gesture::TYPE_CIRCLE:
      {
        CircleGesture circle = gesture;
        std::string clockwiseness;

        if (circle.pointable().direction().angleTo(circle.normal()) <= PI/2) {
          clockwiseness = "clockwise";
        } else {
          clockwiseness = "counterclockwise";
        }

        // Calculate angle swept since last frame
        float sweptAngle = 0;
        if (circle.state() != Gesture::STATE_START) {
          CircleGesture previousUpdate = CircleGesture(controller.frame(1).gesture(circle.id()));
          sweptAngle = (circle.progress() - previousUpdate.progress()) * 2 * PI;
        }
        std::cout << std::string(2, ' ')
                  << "Circle id: " << gesture.id()
                  << ", state: " << stateNames[gesture.state()]
                  << ", progress: " << circle.progress()
                  << ", radius: " << circle.radius()
                  << ", angle " << sweptAngle * RAD_TO_DEG
                  <<  ", " << clockwiseness << std::endl;
        break;
      }
      case Gesture::TYPE_SWIPE:
      {
        SwipeGesture swipe = gesture;
        std::cout << std::string(2, ' ')
          << "Swipe id: " << gesture.id()
          << ", state: " << stateNames[gesture.state()]
          << ", direction: " << swipe.direction()
          << ", speed: " << swipe.speed() << std::endl;
        break;
      }
      case Gesture::TYPE_KEY_TAP:
      {
        KeyTapGesture tap = gesture;
        std::cout << std::string(2, ' ')
          << "Key Tap id: " << gesture.id()
          << ", state: " << stateNames[gesture.state()]
          << ", position: " << tap.position()
          << ", direction: " << tap.direction()<< std::endl;
        break;
      }
      case Gesture::TYPE_SCREEN_TAP:
      {
        ScreenTapGesture screentap = gesture;
        std::cout << std::string(2, ' ')
          << "Screen Tap id: " << gesture.id()
          << ", state: " << stateNames[gesture.state()]
          << ", position: " << screentap.position()
          << ", direction: " << screentap.direction()<< std::endl;
        break;
      }
      default:
        std::cout << std::string(2, ' ')  << "Unknown gesture type." << std::endl;
        break;
    }
  }

  if (!frame.hands().isEmpty() || !gestures.isEmpty()) {
    std::cout << std::endl;
  }
}

void SampleListener::onFocusGained(const Controller& controller) {
  std::cout << "Focus Gained" << std::endl;
}

void SampleListener::onFocusLost(const Controller& controller) {
  std::cout << "Focus Lost" << std::endl;
}

void SampleListener::onDeviceChange(const Controller& controller) {
  std::cout << "Device Changed" << std::endl;
  const DeviceList devices = controller.devices();

  for (int i = 0; i < devices.count(); ++i) {
    std::cout << "id: " << devices[i].toString() << std::endl;
    std::cout << "  isStreaming: " << (devices[i].isStreaming() ? "true" : "false") << std::endl;
  }
}

void SampleListener::onServiceConnect(const Controller& controller) {
  std::cout << "Service Connected" << std::endl;
}

void SampleListener::onServiceDisconnect(const Controller& controller) {
  std::cout << "Service Disconnected" << std::endl;
}

int main(int argc, char** argv) {
  // Create a sample listener and controller
  SampleListener listener;
  Controller controller;

  // Have the sample listener receive events from the controller
  controller.addListener(listener);

  if (argc > 1 && strcmp(argv[1], "--bg") == 0)
    controller.setPolicy(Leap::Controller::POLICY_BACKGROUND_FRAMES);

  // Keep this process running until Enter is pressed
  std::cout << "Press Enter to quit..." << std::endl;
  std::cin.get();

  // Remove the sample listener when done
  controller.removeListener(listener);

  return 0;
}

我该如何解决这个问题?

0 个答案:

没有答案