3

私のコードにはこれがあります。

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はunsignedintです。では、なぜこれが問題なのか、どうすれば回避できるのでしょうか。

コンパイル:

$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
4

4 に答える 4

13
#include <algorithm>

size_t val1;
size_t val2;

size_t maxValue = std::max<size_t>(val1, val2);
于 2010-11-19T21:03:21.317 に答える
2

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

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

于 2010-11-19T21:01:50.420 に答える
2

size_tは実際にはunsignedintではないと思います。私はそれがtypedefではなくそれ自身の型だと思う-少なくともg++では

std :: maxを使用します:

#include <algorithm>

int main(int argc, char **argv)
{
  size_t a = 2, b=3;
  std::max(a,b);
  return 0;
}
于 2010-11-19T21:08:55.533 に答える
-1

これを試して:

std::max((unsigned int)import.size(), (unsigned int)aquired.size());
于 2010-11-19T21:02:20.313 に答える