2010-11-19 9 views
2

私はこれを私のコードに入れています。最大2つのsize_t変数を計算するには

vector<unsigned int> import; 
vector<unsigned int> aquired; 
. . . 
size_t new_size = max(import.size(),aquired.size()); 

と私はこのエラーを取得する:

error: more than one instance of 
overloaded function "max" matches the 
argument list: 
      function "max(int, int)" 
      function "max(unsigned int, unsigned int)" 
      function "max(int, unsigned int)" 
      function "max(unsigned int, int)" 
      function "max(long long, long long)" 
      function "max(unsigned long long, unsigned long long)" 
      function "max(long long, unsigned long long)" 
      function "max(unsigned long long, long long)" 
      function "max(float, float)" 
      function "max(double, double)" 
      function "max(float, double)" 
      function "max(double, float)" 
      argument types are: (size_t, size_t) 

私の理解ではsize_tがunsigned int型であるということです。それではなぜこれが問題なのですか?どうすれば回避できますか?

してコンパイル:

$gcc --version 
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 
$nvcc --version 
nvcc: NVIDIA (R) Cuda compiler driver 
Copyright (c) 2005-2010 NVIDIA Corporation 
Built on Wed_Sep__8_17:12:45_PDT_2010 
Cuda compilation tools, release 3.2, V0.2.1221 
+1

'size_t'は必ずしも' unsigned'ではなく、候補者が来ているところ、私は疑問に思う:

++、少なくともグラムで使用のstd :: maxの - 私はそれは、独自のタイプではなく、typedefのだ疑いから? – UncleBens

+0

gcc 4.4.1で再現できません。あなたは完全なテストプログラムを投稿できますか? – ssegvic

+0

std ::をmaxに追加すると、問題を解決しました。maxが別のヘッダーなどでマスクされていたと思います。 –

答えて

11
#include <algorithm> 

size_t val1; 
size_t val2; 

size_t maxValue = std::max<size_t>(val1, val2); 
+1

私はが必要とは思わない。 – Arkadiy

+0

@Arkadiy - あなたは正しいです、私はそれを明確にするためだけに含めました –

2

size_tのは必ずしもunsigned int型ではない、それはプラットフォームに依存しています。 32ビット用にコンパイルする場合や、ベクトルのサイズが40億未満であることがわかっている場合は、安全にunsigned intにキャストすることができます。一部の64ビットプラットフォームでは、size_tは64ビットですが、符号なし整数は32ビットのみです。
ではなく、あなたの現在のコードでこれを使用してみてください:

size_t new_size = max((unsigned int)import.size(),(unsigned int)aquired.size());

-1

このお試しください:私はsize_tのは実際にはunsigned int型ではないと思います

std::max((unsigned int)import.size(), (unsigned int)aquired.size()); 
2

を。

#include <algorithm> 

int main(int argc, char **argv) 
{ 
    size_t a = 2, b=3; 
    std::max(a,b); 
    return 0; 
} 
関連する問題