小さなCOM DLL(Visual Studio 2008 proを使用)をコンパイルしようとしていますが、リリース時にコンパイルがうまくいきますが、デバッグでコンパイルしようとすると、エラー:C++デバッグ時にエラーが発生しましたが、リリースではありません
error C2664: 'bool (MyClass &, double)': cannot convert parameter 2 from 'MyClass' to 'double'.
今、このエラーは、私がこれを行うコードの行(someValueThatIsADoubleはdouble型であることに注意してください)から来ている:
std::vector<MyClass>::iterator iter = std::lower_bound(MyVector.begin(), MyVector.end(), someValueThatIsADouble, less);
そして以下の機能をこのように定義されています。
をbool less(MyClass& a, double b);
なぜこのエラーが発生するのかわかりません。このエラーが発生する理由がある場合は、どうして私はデバッグで(リリースではなく)取得するのですか?リリースでコンパイルされたdllは正常に動作し、クラッシュしません。また、私は確認し、#ifdef DEBUG
やデバッグやリリースでコンパイルされたコードを変更する可能性のあるものはありません。
EDIT:
私はコードを自分で書いていないし、それは私がについて多くを知らないので、私は二重の値を表すために、私はしたくないと思われるか分からないアルゴリズムであり、 2番目のパラメータとしてdoubleの代わりにMyClassをとるように、より少ない関数の内部でロジックを変更してください。
class MyClass
{
public :
MyClass(): _dValue1(0.0),_dValue2(0.0),_dValue3(0.0)
{
}
MyClass(double dValue1, double dValue3, double dValue2): _dValue2(dValue2),_dValue3(dValue3),_dValue1(dValue1)
{
}
~MyClass() {}
double getValue1() {return _dValue1;}
double getValue3() {return _dValue3;}
double getValue2() {return _dValue2;}
double _dValue1;
double _dValue3;
double _dValue2;
public:
friend class vector<MyClass>;
int compare(const MyClass & t1, const MyClass & t2)
{
if (t1._dValue1 < t2._dValue1)
return -1;
else if (t2._dValue1 < t1._dValue1)
return 1;
else
return 0;
}
bool operator> (const MyClass & rhs)
{
if ( _dValue1 > rhs._dValue1)
return true;
else
return false;
}
bool operator< (const MyClass & rhs)
{
if ( _dValue1 < rhs._dValue1)
return true;
else
return false;
}
};
編集:
MSalters'答えは、デバッグと述語の実装を解放するには、コードのISNので(それは私の場合はリリースではなく、デバッグでコンパイル作られ、同じではないことを示しました非常にきちんとしていて、2種類の比較機能を使うべきではありません)。私がデバッグでこのコードを使用できるようにするためにやったハックは、インクルードの前にこの行を置くことでした。(好ましい解決策はより良い比較機能を持つべきですが、私の場合は不可能でした。)
#define _HAS_ITERATOR_DEBUGGING 0
すべての定数関数に 'const'を加えた方が良いでしょう。 –