2013-01-06 61 views
-4

我使用Visual Studio 2010C:錯誤C2784:「布爾的std ::操作<

struct SPoint 
{ 
    int id; 
    int X; 
    int Y; 
}; 
//////////////// 
vector<SPoint> points; 
vector<SPoint> chosen; 
//////////////// 
void print_vect(const vector<SPoint> & vect) 
{ 
    for (int i = 0; i < vect.size(); ++i) 
    { 
     cout << vect[i].id << " (" << vect[i].X << "," << vect[i].Y << ")"<<endl;    
    }    
    cout << endl; 
} 
//////////////// 
print_vect(points); 

編譯器顯示:

1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(4674): error C2784: 'bool std::operator <(const std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::move_iterator<_RanIt> &' from 'SPoint' 
1>   c:\program files (x86)\microsoft visual studio 10.0\vc\include\iterator(371) : see declaration of 'std::operator <' 

我在一個單獨的項目,這爲藍本

struct SPoint 
{ 
    int X; 
    int Y; 
}; 

vector<SPoint> points; 
vector<SPoint> selected; 

void print_vector(const vector<SPoint> & points) {  
    for (int i = 0; i < points.size(); i++) 
    { 
     cout << '('<<points[i].X <<',' <<points[i].Y <<')'<< endl; 
    } 
    cout << endl; 
} 
int main() 
{ 
    SPoint temp = {0, 0}; 
    for (int i = 0; i < 11;i++) 
    { 
     temp.X = i; 
     temp.Y = i; 
     points.push_back(temp); 
    } 
    for (int i = 5; i< 11;i++) 
    { 
     temp.X = i; 
     temp.Y = i; 
     selected.push_back(temp); 
    } 

    print_vector(points);  
    system ("pause"); 
    return 0; 
} 

它完美地工作。 我試圖找到關於這個問題的東西。他們說,編譯器不能比較兩個對象。將「<」方法添加到您的班級。但我正在學習程序編程。 然後,我的試用示例工作。爲什麼和做什麼?

+2

哪一行發生錯誤? – Mark

+0

不能從'SPoint'推導出參數,聽起來像是誤解了'vector '。確保包含'',並在此之前完成某種使用形式。 – chris

+0

編譯好嗎? http://ideone.com/SxLmKd'bool std :: operator <'讓我不會向我們展示代碼,而在代碼中,你沒有向我們展示'''而不是'<<' 。 –

回答

1

在你的代碼,set_difference電話operator<比較元素以點/選擇:

set_difference(points.begin(), points.end(), 
    chosen.begin(), chosen.end(), back_inserter(cleared)); 

爲了使你的代碼編譯,你需要重載operator<爲SPOINT類型,例如:

bool operator<(const SPoint& lhs, const SPoint& rhs) 
{ 
    return lhs.id < rhs.id; 
} 
+0

你在哪看到'set_difference'調用? – interjay

+0

他把它放在skydrive中.... https://skydrive.live.com/?cid=8cdffba921b002fe&id=8CDFFBA921B002FE%21121 – billz

+0

@Kifsif請用相對代碼更新你的問題 – billz