VisualStudio.NET2003、MFC有りで、
M_PIを使っていて、
#define _USE_MATH_DEFINES
#include <cmath> // math.hでも同じこと
もしているのですが、Debugビルドでは問題なく、Releaseビルドでは、
「error C2065: 'M_PI' : 定義されていない識別子です。」
とコンパイルエラーになります。
逆に、Releaseでは問題ないのに、Debugの時には、
「c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\fstream(465):
error C2061: 構文エラー : 識別子 '_DebugHeapTag'」
というエラーが出たことがあります。
このエラーは
#include <fstream>
を
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
の前に持ってくる事で直ったのですが(謎)、
何故でしょうか??
まず、M_PIの方の件をお願いします。
#define USE_MATH_DEFINES
#include <cmath>
#ifndef M_PI
#define M_PI 3.14159265358979323846 // なぜM_PIが定義されていないと言わ
れるのか?
#endif
スケルトンプロジェクトにこの部分だけコピペしたら、Debug/Release共に問題なく
ビルドできました。(VC++ 6 )
どこかの#ifdef-#endifの間に入ってしまっているとか、ここ以外の部分に問題がある
のではないでしょうか?
>#include <fstream>
>を
>#ifdef _DEBUG
>#define new DEBUG_NEW
>#endif
>の前に持ってくる事で直ったのですが(謎)、
>何故でしょうか??
STLのヘッダーはそうするのが定石のようです。
STL内のnew がDEBUG_NEWに置き換わると山のようにエラーを吐きます。
>STLのヘッダーはそうするのが定石のようです。
>STL内のnew がDEBUG_NEWに置き換わると山のようにエラーを吐きます。
なるほど。そういわれると納得します。
M_PIは、スケルトンに
#define _USE_MATH_DEFINES
#include <cmath>
だけ、貼り付けて、Serialize内で、
double pi = M_PI;
としてみましたが、
やはりエラーが出ます。