C++ 如何在visualc++;2013?

C++ 如何在visualc++;2013?,c++,function,visual-studio-2013,C++,Function,Visual Studio 2013,我试图将function对象作为另一个方法的参数传递,以获得从列表中获取元素的灵活性。 这是我的密码: libusb_device * UsbKeyboard::GetSpecifiedDevice(function<bool(libusb_device *)> pred) { if (_usbDevices == nullptr) return nullptr; int i = 0; libusb_device *dev = nullptr; whi

我试图将function对象作为另一个方法的参数传递,以获得从列表中获取元素的灵活性。 这是我的密码:

libusb_device * UsbKeyboard::GetSpecifiedDevice(function<bool(libusb_device *)> pred)
{
    if (_usbDevices == nullptr) return nullptr;
    int i = 0;
    libusb_device *dev = nullptr;
    while ((dev = _usbDevices[i++]) != NULL)
    {
        if (pred(dev))
            return dev;
    }

    return nullptr;
}


libusb_device * UsbKeyboard::GetHidDevice()
{
    function<libusb_device *> pred = [&](libusb_device *dev) -> bool  {
        struct libusb_device_descriptor desc;
        int r = libusb_get_device_descriptor(dev, &desc);
        if (r >= 0)
            return desc.bDeviceClass == LIBUSB_CLASS_HID;
    };

    return GetSpecifiedDevice(pred);
}
libusb_设备*UsbKeyboard::GetSpecifiedDevice(函数pred)
{
if(_usbDevices==nullptr)返回nullptr;
int i=0;
libusb_设备*dev=nullptr;
while((dev=_usbDevices[i++])!=NULL)
{
国际单项体育联合会(pred(dev))
返回dev;
}
返回空ptr;
}
libusb_device*UsbKeyboard::GetHidDevice()
{
函数pred=[&](libusb_设备*dev)->bool{
结构libusb_设备描述符desc;
int r=libusb获取设备描述符(dev和desc);
如果(r>=0)
返回desc.bDeviceClass==LIBUSB\u CLASS\u HID;
};
返回GetSpecifiedDevice(pred);
}
编译错误位于此代码的第一行:

     error C2027: use of undefined type 'std::_Get_function_impl<_Fty>'
1>          with
1>          [
1>              _Fty=libusb_device *
1>          ]
1>          usbkeyboard.cpp(111) : see reference to class template instantiation 'std::function<libusb_device *>' being compiled
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional(551): error C2504: 'type' : base class undefined
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional(554): error C2027: use of undefined type 'std::_Get_function_impl<_Fty>'
1>          with
1>          [
1>              _Fty=libusb_device *
1>          ]
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional(554): error C2146: syntax error : missing ';' before identifier '_Mybase'
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional(554): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
错误C2027:使用未定义的类型“std::\u Get\u function\u impl”
1> 与
1>          [
1> \u Fty=libusb\u设备*
1>          ]
1> usbkeyboard.cpp(111):请参阅对正在编译的类模板实例化“std::function”的引用
1> c:\program files(x86)\microsoft visual studio 12.0\vc\include\functional(551):错误C2504:“类型”:基类未定义
1> c:\program files(x86)\microsoft visual studio 12.0\vc\include\functional(554):错误C2027:使用未定义的类型“std::\u Get\u function\u impl”
1> 与
1>          [
1> \u Fty=libusb\u设备*
1>          ]
1> c:\ProgramFiles(x86)\microsoft visual studio 12.0\vc\include\functional(554):错误C2146:语法错误:缺少“;”在标识符“\u Mybase”之前
1> c:\program files(x86)\microsoft visual studio 12.0\vc\include\functional(554):错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认int

它说函数的基类是未定义的。为什么?

函数pred

应该是

function<bool(libusb_device *)> pred
函数pred

或者干脆
auto pred
您在
函数pred

应该是

function<bool(libusb_device *)> pred
函数pred

或者干脆
auto pred

顺便说一句,不是所有lambda返回路径都指向UB。顺便说一句,不是所有lambda返回路径都指向UB。