Ich muss meine eigene Funktion double round(double,double)
als extern "C"
deklarieren und es steht in Konflikt mit double round(double)
in <bits/mathcalls.h>
deklariert (gcc 5.4.0). Und das ist nur, weil ich einschließe.Ist es möglich, `round` zu zwingen, im namespace std zu sein?
Es ist die Präprozessor Variable _GLIBCPP_USE_NAMESPACES, die den Namespace std um Runde zu erzwingen scheint, aber es ergibt sich der Fehler
/usr/include/c++/5/cwchar:141:11: error: ‘::btowc’ has not been declared
definiert, wenn <map>
enthalten ist, die ich später brauchen.
Gibt es einen anderen Weg?
Eine gängige Methode zur Vermeidung von Konflikten in C-Funktionen ist die Verwendung eines Präfixes wie 'double mylib_round (double, double)' '. Im Allgemeinen können Sie nicht verhindern, dass 'double round (double)' im globalen Namespace enthalten ist. (Natürlich könnte es eine gcc-spezifische Art geben, nicht zu sagen, dass die Frage nicht gültig ist.) –
'_GLIBCPP_USE_NAMESPACES' sieht völlig kaputt aus. Das ist eine Schande. – Quentin
@Quentin: Also die Antwort wäre "Theoretisch ja, nämlich definieren' _GLIBCPP_USE_NAMESPACES', aber praktisch nein, weil '_GLIBCPP_USE_NAMESPACES' ist gebrochen"? – MarkusParker