不止一个构造匹配参数列表

时间:2011-10-13 08:38:45

标签: c++ constructor compiler-errors

我尝试用VS2010编译它

long long min = std::numeric_limits<int>::min();
unsigned long long max = std::numeric_limits<int>::max();


std::bitset<64> minimal(min);//here I'm getting the error  
cout << "minimal: " << minimal;  
error:  
error C2668: 'std::bitset<_Bits>::bitset' : ambiguous call to overloaded function  
1>          with  
1>          [  
1>              _Bits=64  
1>          ]  
1>          c:\program files\microsoft visual studio 10.0\vc\include\bitset(136): could   be 'std::bitset<_Bits>::bitset(_ULonglong)'  
1>          with  
1>          [  
1>              _Bits=64  
1>          ]  
1>          c:\program files\microsoft visual studio 10.0\vc\include\bitset(127):   or       'std::bitset<_Bits>::bitset(int)' 
1>          with  
1>          [  
1>              _Bits=64  
1>          ]    
1>          while trying to match the argument list '(__int64)'    

为什么呢?显然这个参数是long long类型,构造函数应该用于这种类型。我不明白发生了什么。

2 个答案:

答案 0 :(得分:3)

我没有看到long long作为您在该列表中给出的选项之一。我只看到:

  • _ULonglong
  • INT
  • _int64

为什么不将min投射到unsigned long long并查看是否修复了它。或者更好的是,使用无符号类型 - 您是否有可能拥有具有负数元素的位集? : - )

答案 1 :(得分:2)

这是VC2010中的一个错误,已在VC2011中修复。

Bug Report 注意那里的评论。