2009-08-14 5 views
0

Ich bin mit Phoenix :: bind und erhalten diese Fehlermeldung:Fehler auf binden :: boost phoenix Kompilieren

Fehler C2039: 'bind': ist kein Mitglied von 'Phönix'

die Codezeile, wo ich binden bin mit und wo der Fehler zeigt ist:

Phönix :: bind ( & OptionalInputPort :: eraseDataEditor) (phoenix :: var (* optionPort))

und ich kann nicht herausfinden, was das Problem ist.

der Phönix enthalten ist diese Zeile: #include boost/Geist/home/phoenix.hpp

Dank.

Antwort

1

Der phoenix Namespace ist innerhalb die boost Namensraum (wie alles andere in Boost).

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

, dass alle Eingaben zu vermeiden, könnten Sie Ihre C++ Datei mit diesem Vorwort einen Namespace alias zu erstellen:

namespace phoenix = boost::phoenix; 

Dann ursprünglichen Code funktionieren sollte. Wenn Sie bind mit viel, könnten Sie Ihre Compiler sagen, dass, wenn Sie bind sagen, meinen Sie die eine in boost::phoenix:

using boost::phoenix::bind; 

Wenn Sie mit viel Sachen aus Phoenix, könnten Sie einfach bringe alles aus diesem Namespace mit ein, obwohl das unbeabsichtigte Folgen haben kann, da es Dinge enthält, von denen du nicht mal wusstest, dass sie existieren, und die deinen eigenen Code beeinträchtigen könnten.

using namespace boost::phoenix;