C++ 如何在visualc++;2013?
我试图将function对象作为另一个方法的参数传递,以获得从列表中获取元素的灵活性。 这是我的密码: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
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。