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