Ошибка при форсировании 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;
Другие вопросы по тегам