2013-01-07 56 views
0

的左手操作數這是我的代碼:C++:錯誤C2678:二進制「=」:沒有操作員發現這需要類型「常量SPOINT」

#include <StdAfx.h>; 
#include <iostream>; 
#include <vector>; 
#include <algorithm>; 
#include <iterator>; 

using namespace std; 
struct SPoint 
{ 
    int id; 
    int X; 
    int Y; 
}; 

bool operator<(const SPoint& p1, const SPoint&p2){ 
    return p1.id <p2.id; 
} 

vector<SPoint> points; 
vector<SPoint> chosen; 
vector<SPoint> cleared; 

vector<SPoint>::iterator it; 

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; 
} 
bool compare(double val1, double val2) 
{ 
    return val1 > val2; 
} 
void sort_points(const vector<SPoint> & vect, char command) 
{ 
    bool cmp_result; 
    SPoint temp; 
    bool sorted=true; 
    for (int i = 0; i < vect.size()-1 ; i++) 
    { 
     sorted=true; 
     for (int j = 1; j <= vect.size()-1; j++) 
     { 
      switch (command) 
      { 
       case 'x': 
        { 
         cmp_result = compare(vect[j-1].X, vect[j].X); 
         break; 
        } 
       case 'y': 
        { 
         cmp_result = compare(vect[j-1].Y, vect[j].Y); 
         break;    
        }    
       case 'i': 
        { 
         cmp_result = compare(vect[j-1].id, vect[j].id); 
         break;    
        }   
      } 

      if (cmp_result) 
      { 
       sorted = false; 
       temp = vect[j-1]; 
       vect[j-1] = vect[j]; 
       vect[j] = temp; 
      } 

     } 
     if (sorted) 
     { 
      cout << "Sorted:" << endl; 
      print_vect(vect);   
      break; 
     } 
    } 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    SPoint temp; 
    for (int i = 0; i < 10; i++) 
    { 
     temp.id = i; 
     temp.X = i; 
     temp.Y = i; 
     points.push_back(temp); 
    } 

    for (int i = 5; i < 10; i++) 
    { 
     temp.id = i; 
     temp.X = i; 
     temp.Y = i; 
     chosen.push_back(temp); 
    } 

    cout << "Points:" << endl; 
    print_vect(points); 
    cout << endl << endl; 

    cout << "Chosen:" << endl; 
    print_vect(chosen); 

    system("pause"); 
    sort_points(points, 'i'); 
    sort_points(chosen, 'i'); 
    set_difference(points.begin(), points.end(), chosen.begin(), chosen.end(), back_inserter(cleared)); 
    print_vect(cleared); 

    return 0; 
} 

任何人可以幫助我瞭解爲什麼我有這些錯誤:

1>c:\users\гость\documents\visual studio 2010\projects\grablevskij2\grablevskij2\grablevskij2.cpp(110): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const SPoint' (or there is no acceptable conversion) 
1>   c:\users\гость\documents\visual studio 2010\projects\grablevskij2\grablevskij2\grablevskij2.cpp(18): could be 'SPoint &SPoint::operator =(const SPoint &)' 
1>   while trying to match the argument list '(const SPoint, const SPoint)' 
1>c:\users\гость\documents\visual studio 2010\projects\grablevskij2\grablevskij2\grablevskij2.cpp(111): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const SPoint' (or there is no acceptable conversion) 
1>   c:\users\гость\documents\visual studio 2010\projects\grablevskij2\grablevskij2\grablevskij2.cpp(18): could be 'SPoint &SPoint::operator =(const SPoint &)' 
1>   while trying to match the argument list '(const SPoint, SPoint)' 
+0

гость,你的例子是太長的載體。儘量減少它的最低限度。您可以刪除該示例的大約95%以獲得相同的錯誤。這是一項值得開發的技巧,可以幫助你自己。 –

回答

5

在你sort_points功能,您聲明vectconst。後來,你說:

vect[j-1] = vect[j]; 
vect[j] = temp; 

由於vectconst,這將導致constoperator[]被調用,它返回一個const參考對象,這是不可轉讓。

看到它是如何命名sort_points,不返回一個新的載體,我希望它來修改我通過。

相關問題