2010-11-19 21 views
2

Bunu kodumda var.En fazla iki size_t değişkenini hesapladım

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

ve bu hatayı alıyorum:

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) 

benim anlayış size_t işaretsiz int olmasıdır. Öyleyse neden bu bir problem ve nasıl etrafta dolaşacağım. derlenmesi

:

$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' mutlaka bir' unsigned' değil, adayların geliyor nerede acaba: En az

Kullanım std :: max ++ g - Ben kendi türü değil, bir typedef şüpheli dan? – UncleBens

+0

Bunu gcc'de üretemiyorum 4.4.1. Tam bir test programı gönderebilir misin? – ssegvic

+0

Std :: max eklemek için problemi çözdüm max'in başka bir başlık veya başka bir şey tarafından maskelenmiş olduğunu düşünüyorum. –

cevap

11
#include <algorithm> 

size_t val1; 
size_t val2; 

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

'un gerekli olduğunu düşünmüyorum. – Arkadiy

+0

@Arkadiy - haklısınız, bunu sadece açıklık için dahil ettim –

2

size_t platformun bağlıdır, zorunlu olarak işaretsiz int değildir. 32 bitlik bir derleme yapıyorsanız veya vektörünüzün 4 milyarın altında bir boyuta sahip olacağını biliyorsanız, imzasız bir int için güvenli bir şekilde yayınlayabilirsiniz. Bazı 64 bit platformlar, 64 bit boyut_t kullanır, ancak yalnızca 32 bit olarak imzasız bir int'ye sahiptir. bunun yerine mevcut bu kod kullanılarak
Dene:

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

-1

bu deneyin:

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

Aslında imzasız int size_t sanmıyorum.

#include <algorithm> 

int main(int argc, char **argv) 
{ 
    size_t a = 2, b=3; 
    std::max(a,b); 
    return 0; 
} 
İlgili konular