2009-08-14 6 views
0

J'utilise le bind de Phoenix et de recevoir ce message d'erreur:Erreur sur la liaison de phénix stimuler la compilation

erreur C2039: 'bind': n'est pas membre du phénix

la ligne de code où j'utilise bIND et où l'erreur est pointée est:

phénix de bind ( & OptionalInputPort :: eraseDataEditor) (phoenix :: var (* optionalPort))

et je n'arrive pas à comprendre quel est le problème.

le phénix inclure cette ligne est: stimuler #include/esprit/home/phoenix.hpp

Merci.

Répondre

1

L'espace de noms est phoenixl'intérieur l'espace de noms boost (comme tout le reste dans Boost).

boost::phoenix::bind(&OptionalInputPort::eraseDataEditor) (boost::phoenix::var(*optionalPort)) 

Pour éviter tout ce qui frappe, vous pouvez préfacer votre C++ fichier avec cette option pour créer un alias d'espace de noms :

namespace phoenix = boost::phoenix; 

Ensuite, votre code d'origine devrait fonctionner. Si vous utilisez bind beaucoup, vous pouvez dire à votre compilateur que lorsque vous dites bind, vous voulez dire celui boost::phoenix:

using boost::phoenix::bind; 

Si vous utilisez beaucoup de choses de Phoenix, vous pouvez simplement apporter tout de cet espace de noms, bien que cela puisse avoir des conséquences inattendues puisqu'il inclura les choses dont vous ne saviez même pas qu'elles existaient, et qui pourraient interférer avec votre propre code.

using namespace boost::phoenix;