0
私自身の関数double round(double,double)
をextern "C"
と宣言する必要があり、それはdouble round(double)
と矛盾し、<bits/mathcalls.h>
(gcc 5.4.0)で宣言されています。そしてそれは私が<cstdint>
を含むからです。`round`を名前空間stdに入れることは可能ですか?
あり、名前空間にSTD周りラウンドを強制するようで、プリプロセッサ変数_GLIBCPP_USE_NAMESPACES、ですが、それを定義すると、エラー私は後で必要<map>
が含まれている
/usr/include/c++/5/cwchar:141:11: error: ‘::btowc’ has not been declared
に、得られます。
他の方法はありますか?
C関数の競合を避ける一般的な方法は、 'double mylib_round(double、double)'のような接頭辞を使用することです。一般に、 'double round(double)'がグローバル名前空間に入るのを防ぐことはできません。 (もちろん、gccの特定の方法があるかもしれませんが、質問が有効ではないと言っているわけではありません) –
'_GLIBCPP_USE_NAMESPACES'は完全に壊れています。残念です。 – Quentin
@Quentin:答えは「理論的にはyesです。つまり、 '_GLIBCPP_USE_NAMESPACES'を定義しますが、' _GLIBCPP_USE_NAMESPACES'が壊れているので、実際にはnoです。 – MarkusParker