2016-08-08 11 views
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 

に、得られます。

他の方法はありますか?

+2

C関数の競合を避ける一般的な方法は、 'double mylib_round(double、double)'のような接頭辞を使用することです。一般に、 'double round(double)'がグローバル名前空間に入るのを防ぐことはできません。 (もちろん、gccの特定の方法があるかもしれませんが、質問が有効ではないと言っているわけではありません) –

+0

'_GLIBCPP_USE_NAMESPACES'は完全に壊れています。残念です。 – Quentin

+0

@Quentin:答えは「理論的にはyesです。つまり、 '_GLIBCPP_USE_NAMESPACES'を定義しますが、' _GLIBCPP_USE_NAMESPACES'が壊れているので、実際にはnoです。 – MarkusParker

答えて

0

roundがグローバル名前空間に入るのを防ぐ正式な方法がないように見えます。標準ライブラリのgccの実装での_GLIBCPP_USE_NAMESPACESの存在が、このような可能性を示していますが、プリプロセッサ変数であり、たとえ古いバージョンで可能だったとしても、現在壊れています。

関連する問題