2011-11-10 17 views
1

我在Visual Studio 2010中收到以下錯誤編譯。「調試斷言失敗!」使用列表容器中的Sort函數出錯

調試斷言失敗! 表達式:無效操作者<

它是下面的比較函數的結果:

bool ShortestJob(Process_T *first, Process_T *second) 
{ 
    int firstRemaining = first->cpuTime - first->cpuProgress; 
    int secondRemaining = second->cpuTime - second->cpuProgress; 
    if ((firstRemaining < secondRemaining) || ((first->cpuProgress == second->cpuProgress) && (first->processID < second->processID))) { 
     return true; 
    } else { 
     return false; 
    } 
} 

領域的ProcessID是一個i​​nt。我該如何解決這個錯誤?

+0

它是純C++嗎? – Dani

+0

「processID」字段的類型是什麼? –

+0

是的,它是純粹的C++; processID是一個i​​nt。 – idealistikz

回答

2

如果用於排序的比較函數對象不正確,並且不遵循嚴格的弱排序,Visual Studio 2010將在調試構建中聲明。

試着改變你的函數

bool ShortestJob(Process_T *first, Process_T *second) 
{ 
    int firstRemaining = first->cpuTime - first->cpuProgress; 
    int secondRemaining = second->cpuTime - second->cpuProgress; 
    if ((firstRemaining < secondRemaining) || ((firstRemaining == secondRemaining) && (first->processID < second->processID))) { 
     return true; 
    } else { 
     return false; 
    } 
} 

他們的方式定義了操作不正確。你應該只比較processID當且僅當你的情況下的第一個標準是(firstRemaining,secondRemaining)等於