Ошибка при форсировании Phoenix::bind compiling
Я использую phoenix:: bind и получаю это сообщение об ошибке:
ошибка C2039: "связать": не является членом "Феникс"
Строка кода, где я использую bind и куда указывает ошибка:
phoenix:: bind (& OptionalInputPort:: eraseDataEditor) (phoenix:: var (* необязательный Port))
и я не могу понять, в чем проблема.
Феникс включает эту строку: #include boost/spirit/home/phoenix.hpp
Благодарю.
1 ответ
phoenix
пространство имен находится внутри boost
пространство имен (как и все остальное в Boost).
boost::phoenix::bind( &OptionalInputPort::eraseDataEditor ) ( boost::phoenix::var( *optionalPort ) )
Чтобы избежать всего этого, вы могли бы предварять файл C++ следующим образом, чтобы создать псевдоним пространства имен:
namespace phoenix = boost::phoenix;
Тогда ваш оригинальный код должен работать. Если вы используете bind
много, вы могли бы сказать своему компилятору, что когда вы говорите bind
Вы имеете в виду тот, в boost::phoenix
:
using boost::phoenix::bind;
Если вы используете много вещей из Phoenix, вы можете просто ввести все из этого пространства имен, хотя это может иметь непредвиденные последствия, поскольку оно будет включать в себя то, чего вы даже не подозревали, и которое может помешать вашему собственному коду,
using namespace boost::phoenix;