2016-08-08 31 views
0

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?

+2

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.) –

+0

'_GLIBCPP_USE_NAMESPACES' sieht völlig kaputt aus. Das ist eine Schande. – Quentin

+0

@Quentin: Also die Antwort wäre "Theoretisch ja, nämlich definieren' _GLIBCPP_USE_NAMESPACES', aber praktisch nein, weil '_GLIBCPP_USE_NAMESPACES' ist gebrochen"? – MarkusParker

Antwort

0

Es ist sehr viel sieht aus wie es keine offizielle Weg ist round zu verhindern, im globalen Namespace und die Existenz von _GLIBCPP_USE_NAMESPACES in gcc-Implementierung der Standardbibliothek zeigt eine solche Möglichkeit in der Tat zu sein, aber ich konnte keine Dokumentation darüber finden Präprozessor-Variable und selbst wenn es in einer älteren Version möglich war, ist sie aktuell defekt.