【发布时间】:2015-12-03 06:37:11
【问题描述】:
您好,我有以下代码:
bool PinManager::insertPin(const std::string& p_pinNumber, const std::string& p_mode)
{
boost::shared_ptr<GPIOPin> pin(new GPIOPin(p_pinNumber, p_mode));
if (pin)
{
m_pinsInUse.insert(std::make_pair<std::string, boost::shared_ptr<GPIOPin> >(p_pinNumber, pin));
return true;
}
return false;
}
这段代码一直编译,但是当我添加-std=c++0x标志时,这段代码编译失败并显示消息:
[ 42%] Building CXX object gpioaccess/CMakeFiles/gpioaccess.dir/pinmanager/pinmanager.cpp.o
/home/pi/robot_2.0/trunk/gpioaccess/pinmanager/pinmanager.cpp: In member function 'bool gpioaccess::PinManager::insertPin(const string&, const string&)':
/home/pi/robot_2.0/trunk/gpioaccess/pinmanager/pinmanager.cpp:39:101: error: no matching function for call to 'make_pair(const string&, boost::shared_ptr<gpioaccess::GPIOPin>&)'
/home/pi/robot_2.0/trunk/gpioaccess/pinmanager/pinmanager.cpp:39:101: note: candidate is:
/usr/include/c++/4.6/bits/stl_pair.h:262:5: note: template<class _T1, class _T2> std::pair<typename std::__decay_and_strip<_T1>::__type, typename std::__decay_and_strip<_T2>::__type> std::make_pair(_T1&&, _T2&&)
gpioaccess/CMakeFiles/gpioaccess.dir/build.make:77: recipe for target 'gpioaccess/CMakeFiles/gpioaccess.dir/pinmanager/pinmanager.cpp.o' failed
make[2]: *** [gpioaccess/CMakeFiles/gpioaccess.dir/pinmanager/pinmanager.cpp.o] Error 1
CMakeFiles/Makefile2:75: recipe for target 'gpioaccess/CMakeFiles/gpioaccess.dir/all' failed
make[1]: *** [gpioaccess/CMakeFiles/gpioaccess.dir/all] Error 2
Makefile:75: recipe for target 'all' failed
make: *** [all] Error 2
经过一番挖掘,我发现之前编译的事实可能是一个错误;但是,我仍然不确定如何解决这个问题。有没有人有正确方向的观点?
gcc --version 是gcc (Debian 4.6.3-14+rpi1) 4.6.3
【问题讨论】:
-
make_pair应该能够推断出参数类型,尝试删除显式模板参数:std::make_pair(p_pinNumber, pin) -
旁注:
if (pin)始终为真,如果抛出异常则无效 -
@melak47 这就是删除参数允许代码编译的问题。谢谢!
-
请不要在您的代码中发布行号。将其复制并粘贴到编辑器或在线编译器表单中变得非常困难。
-
@DieterLücking 很好,感谢您指出这一点。
标签: c++ c++11 gcc boost raspberry-pi