2009-06-04 24 views
0

私はmaxとsqrtに関する問題がありますC++の数学関数の問題

もし私がmath.hを含んでいれば、sqrtを見つけることはできません。

cmathヘッダーファイルを表示し、その中にmath.hが含まれていますが、math.hを開こうとするとそのファイルが見つからないと表示されます。私のmath.hがLinuxで見逃されています。

+0

ほとんどの場合、/usr/include/math.hで見つけることができます。あなたはそれがないと確信していますか?多くのディストリビューションにglibcまたはglibc-headersパッケージの一部としてインストールされています。 – jmanning2k

答えて

5

申し訳ありませんが、私は答えを見つけました。

私はちょうどそれをこのように記述する必要があります。

のstd ::最大 のstd :: sqrtの

しかし、なぜそれがないと動作しない "のstd ::" のWindows OSの下で?

+2

これはコンパイラによって異なります。一部の関数は、C標準ライブラリの関数をstd名前空間に正しく配置しません。 –

+3

私はwindows.hヘッダファイルがminとmaxをマクロとして定義していると思います。それらは、前記ファイルを含める前にNOMINMAXを定義することによって無効にすることができます。 –

4

NB:Cで ++あなたが< math.h>の

NB #includeしない> < cmathを#includeする必要があります も名前空間を指定することをお勧めし

+0

私はsombodyがsthをしなければならない理由を説明する方が良いと思います。 – user3085931

1

お使いのシステムでは、おそらくCヘッダを持っていますファイルシステムの1つの場所で、別の場所にC++ヘッダーを作成します。システムヘッダを検索するディレクトリの実際のリストに精通していますか? (実際には、実装にはシステムヘッダファイルは必要ありませんが、私がよく知っていることはすべてあります.C++の標準では、文#include <cmath>が何をしなければならないかについての要件があります。

答えでは、LinuxとWindowsのC++の違いについて説明します。これらはOS固有のものではなく、実装固有のものです。あなたはおそらくWindows上でVisual C++を使用していて、Linux上で何か他のものを使用しているでしょう(VC++はWindows上でのみ動作するためです)。デフォルト設定では動作が異なる場合があります。

実際、#include <math.h>#include <cmath>と同じですが、math.hはすべての関数名などをstd :: namespaceに移動する必要があります。 Linux C++システムでこれが起こっていない場合、問題があります。残念ながら、あなたは何が起こっているのかを把握するのに十分な情報を提供していません。

3

それはあなたがSTDを使用する必要はありませんでした理由は::以前、どこかHEADERFILEに次の文が書かれていたされているためている可能性があります:

using namespace std; 

この文の後、「STD ::」プレフィックスはもう必要ありません。

この明確化されたものがほしいと思っています...