2012-01-25 30 views
0

テンプレート関数でstd関数を使用できますか?私は1つの文字列に権利を追加し、テンプレートでstd :: maxを使用するとエラーが発生する

#pragma region BlendFunctions 

template <class T> 
T BlendLightenf(T x, T y) 
{ 
    return std::max(x, y); //errors here 
} 
template <class T> 
T BlendDarkenf(T x, T y) 
{ 
    return std::min(x, y); //errors here 
} 

を書き、

error C2589: '(' : illegal token on right side of '::' 

error C2059: syntax error : '::' 

を取得している (xとyは通常floatです)。

私の定義:maxが他の誰かによって定義されていない

#ifdef MAGICLIB_EXPORTS 
#define CPPWIN32DLL_API __declspec(dllexport) 
#else 
#define CPPWIN32DLL_API __declspec(dllimport) 
#endif 


#include <stdio.h> 
#include <string> 
#include <algorithm> 
+0

'std :: max'を直接使うだけですが、これは何ですか? –

+3

あなたはどのヘッダを含んでいますか?いくつかのマクロが干渉することがありますか? –

+2

@CatPlusPlus私はあなたを取得しません。誰かが大量のコードを投稿すると、問題を理解するために必要な最小限のコードを削除するように求められます。彼らが最低額を掲示すると、そのようなことが何をしているのかが分かります。 –

答えて

4

チェック。

maxを何か他のもの(おそらく(a > b ? a : b)など)と定義しているファイルを含めることがあります。

これらのファイルのいずれかが含まれている場合、プリプロセッサーはstd::maxをその定義(何かはstd::(a > b ? a : b)のようなもの)に置き換えると奇妙なエラーが発生します。

違反ヘッダの後ろに#undef maxを追加するとOKです。

+2

トップのどこかではありません。そのマクロを定義したヘッダーの後になければなりません。 –

+0

プロジェクトで#undefを使用していません –

+0

@BjörnPollex:はい、そうです –

5

VC++を使用していますか?その場合は、 が必要です。/DNOMINMAXをコマンドラインに追加する必要があります。どこでも<windows.h>を含んでいませんか(GUIでは、 構成プロパティ→ C/C++ →プリプロセッサ→プリプロセッサ 定義。下です)(ただし には、他のファイルをインクルードファイルを含めるので、これは、制御する 困難です。 ..)。

関連する問題