Не могу скомпилировать код, потому что он устарел в C ++ 11 - PullRequest
0 голосов
/ 08 октября 2019

У меня есть код, компилируемый с помощью ns-3, но я сталкиваюсь с некоторыми проблемами, когда пытаюсь их скомпилировать. Я думаю, что причина может заключаться в том, что некоторые функции устарели в C ++ 11. Но я не знаю, как пересмотреть код.

Вот код, который я думаю, должен быть пересмотрен:

m_sendBuffer.erase(
    std::remove_if(
        m_sendBuffer.begin(), m_sendBuffer.end(),
        std::bind2nd(std::ptr_fun(DsrSendBuffer::IsEqual), dst)
    ),
    m_sendBuffer.end()
);

Вот ошибка:

../src/dsr/model/dsr-rsendbuff.cc:102:55: error: 'ptr_fun<ns3::dsr::DsrSendBuffEntry, ns3::Ipv4Address, bool>' is deprecated [-Werror,-Wdeprecated-declarations]
                                      std::bind (std::ptr_fun (DsrSendBuffer::IsEqual), dst)), m_sendBuffer.end ());

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1115:1: note: 'ptr_fun<ns3::dsr::DsrSendBuffEntry, ns3::Ipv4Address, bool>' has been explicitly marked deprecated here
_LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1101:39: note: expanded from macro '_LIBCPP_DEPRECATED_IN_CXX11'
define _LIBCPP_DEPRECATED_IN_CXX11 _LIBCPP_DEPRECATED

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1090:48: note: expanded from macro '_LIBCPP_DEPRECATED'
define _LIBCPP_DEPRECATED __attribute__ ((deprecated))

Ответы [ 2 ]

3 голосов
/ 08 октября 2019

Кажется, что они действительно используют устаревший API, но вы все равно можете скомпилировать его, допустив, чтобы предупреждение об устаревании рассматривалось как предупреждение. Добавьте это к опциям вашего компилятора:

-Wno-error=deprecated-declarations

Если вы хотите вместо этого обновить код, вы можете вместо этого использовать лямбду:

m_sendBuffer.erase(
    std::remove_if(
        m_sendBuffer.begin(), m_sendBuffer.end(),
        [&dst](auto const& buf) { return DsrSendBuffer::IsEqual(buf, dst); }
    ),
    m_sendBuffer.end()
);
2 голосов
/ 08 октября 2019

Вы можете клонировать свежую версию ns-3 из ns-3 @ gitlab .

Использование std::ptr_fun и std::bind2nd было удалено 25 августа 2019 года.

...