Ich verwende die neue libcxx-Bibliothek, und ich habe einen Code, der die Socket-Funktion bind()
aufruft. Das Problem ist, dass, wenn ich using namespace std;
Typen der Compiler mir einen Fehler für den folgenden Code gibt:Kompilieren von Code, der die Socket-Funktion bind() mit libcxx verwendet, schlägt fehl
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
Den Fehler mit Klirren (SVN build):
error: no viable conversion from '__bind<int &, sockaddr *, unsigned long>' to 'int'
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
Ich denke, dass das Problem ist, dass using namespace std;
bringt die Funktion std::bind()
aus dem Header <functional>
in den Bereich (obwohl der Header nicht enthalten ist). Da ich eine Bibliothek eines Drittanbieters verwende, die den gesamten Namespace std verwendet, kann ich die Klassennamen nicht leicht in vollqualifizierte Namen ändern.
Ich frage mich, ob dies ein Problem bei der Implementierung der Bibliothek ist oder ob es einige neue Regeln in C++ 11 gibt, die möglicherweise einen alten Code, der bind()
verwendet, brechen könnte. Irgendwelche Gedanken dazu würden geschätzt.
Dank
Roman
Was meinen Sie, wenn Sie sagen, dass die Third-Party-Bibliothek den gesamten Namespace-Standard verwendet? – Troubadour
Ich meine, dass es 'using namespace std;' in einigen der Dateien hat. –
Vermutlich nur in den Quelldateien und nicht in den Headern? Das sollte dich überhaupt nicht beeinflussen. – Troubadour