gpt4 book ai didi

c++编译错误在调试但不是在发布

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:03 24 4
gpt4 key购买 nike

我正在尝试编译一个小的 COM dll(使用 visual studio 2008 pro),它在发行版中编译得很好,但是当我尝试在调试中编译它时,出现编译错误:

error C2664: 'bool (MyClass &, double)': cannot convert parameter 2 from 'MyClass' to 'double'.

现在这个错误来 self 执行此操作的代码中的一行(请注意 someValueThatIsADouble 的类型为 double):

std::vector<MyClass>::iterator iter = std::lower_bound(MyVector.begin(), MyVector.end(), someValueThatIsADouble, less);

less 函数是这样定义的:

bool less(MyClass& a, double b);

我不明白为什么会出现这个错误,如果这个错误有充分的理由,为什么我只在 Debug 中出现(而不是在 Release 中出现)?该 dll 在 Release 中编译时运行良好且不会崩溃。另外,我检查了一下,没有 #ifdef DEBUG 或类似的东西可以更改在调试和发布中编译的代码。

编辑:

我没有自己写代码,这是一个我不太了解的算法,所以我不知道 double 值应该代表什么,我不想去改变里面的逻辑less 函数将 MyClass 而不是 double 作为第二个参数。

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 的回答表明谓词的调试和发布实现不相同,这使得它在发布中编译而不是在我的情况下调试(因为代码不是很整洁,不应该使用比较具有 2 种不同类型的功能)。为了能够在调试中使用此代码,我所做的黑客攻击也是将此行放在任何包含之前(请注意,首选解决方案应该是具有更好的比较功能,但在我的情况下这是不可能的):

#define _HAS_ITERATOR_DEBUGGING 0 

最佳答案

错误消息表明您正在使用 MSVC。它的库实现包含对谓词的调试检查。特别是,对于部分顺序谓词(例如您的 less ),我认为它测试是否 Pred(a,b) && Pred(b,a) == false .显然,这在这里行不通。

(谓词的一个常见错误是,人们习惯于定义一个顺序,使得 a<bb<a 。在这种情况下,有许多 <algorithm> 被打破,这就是为什么现在有一些调试检查以防止此类错误。如果您实际上设法在运行时传递了一对错误的 a,b 值,它们仍然只会捕获错误;它们无法在编译时捕获理论上的错误)

关于c++编译错误在调试但不是在发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6733431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com