Wie mehrdeutigkeit von "log" auflösen



  • Hab ein nerviges Problem, die Funktion log(double), aus der c bibliothek kollidiert mit boost::unit_test::log
    Nun habe ich aber nirgendswo using namespace, so dass eigentlich beides separiert sein müsste

    error C2872: 'log': Mehrdeutiges Symbol
    5>        kann 'log' sein
    5>        oder "boost::unit_test::log"
    

    Es kann natürlich sein, dass die boost test suite das von alleine macht, mit dem namespace



  • Seikilos schrieb:

    Nun habe ich aber nirgendswo using namespace,

    Zumindest nirgendwo wo du es siehst - wenn er darauf besteht, dass boost::unit_test::log zu den kandidaten gehört, hast du entweder in irgendeinem include eine entsprechende using-direktive, oder du befindest dich in einem untergeordneten namespace von boost::unit_test.

    Wie auch immer, auflösen kannst du das, indem du es qualifizierst, also entweder boost::unit_test::log explizit ausschreibst oder ::log, je nachdem was du brauchst.

    Vermeiden kannst du es, indem du statt des C-Headers <math.h> den C++-Header <cmath> benutzt, dort ist nämlich die C-Funktion log im namespace std untergebracht. Und natürlich indem du keine header mit using-direktiven benutzt.



  • Ok, das ::log ist wohl das, was ich suche. Ich bin wohl gezwungenermaßen im boost::unit_test namespace und es wurde auch der c math.h header angezogen.
    Hab mich nämlich auch gewundert, warum die Methoden nicht im std-namespace sind.

    Danke


Log in to reply