#include<iostream>
#include<vector>
#include<algorithm>
class Integer
{
public:
int m;
Integer(int a):m(a){};
};
class CompareParts
{
public:
bool operator()(const Integer & p1,const Integer & p2)
{
return p1.m<p2.m;
}
}obj1;
int main()
{
std::vector<Integer> vecInteger;
vecInteger.push_back(Integer(12));
vecInteger.push_back(Integer(13));
vecInteger.push_back(Integer(5));
vecInteger.push_back(Integer(7));
vecInteger.push_back(Integer(9));
Integer obj2();
std::sort(vecInteger.begin(),vecInteger.end(),obj1);
std::sort(vecInteger.begin(),vecInteger.end(),obj2);
}
为什么第二个排序函数中的obj2会导致编译错误。
答案 0 :(得分:15)
Integer obj2()
不是对象的定义,它是名为obj2
的函数的声明,返回Integer
(将其放在任何函数之外以理解为什么会这样) 。有时这种情况会发生在更复杂的结构中,甚至可能更加混乱。有人将此命名为最令人烦恼的解析。
以下是更复杂案例的承诺示例:
struct Foo {};
struct Bar { Bar(Foo); };
Bar quxx(Foo()); // quxx is a function
这里quxx
是一个函数返回一个Bar并将(一个指针)带到一个返回Foo且没有参数的函数。您可以更清楚地写出相同的声明:
Bar quxx(Foo (*fn)()); // quxx is the same function as above
要获取使用构造函数采用Foo初始化的变量的定义,可以添加一个括号级别:
Bar quux((Foo())); // quux is a variable
答案 1 :(得分:3)
因为obj2是一个函数。见this
答案 2 :(得分:1)
obj2不是BinaryPredicate,并且作为std :: sort
的第三个参数无效obj2需要像
// Return whether first element is greater than the second
bool UDgreater ( int elem1, int elem2 )
{
return elem1 > elem2;
}
或obj1使用的仿函数类型。
答案 3 :(得分:1)
没有参数构造函数的定义。
使用,整数obj2(0);
#include<iostream>
#include<vector>
#include<algorithm>
class Integer
{
public:
int m;
Integer(int a):m(a){};
bool operator()(const Integer p1,const Integer p2)
{
return p1.m<p2.m;
}
};
class CompareParts
{ public:
bool operator()(const Integer p1,const Integer p2)
{
return p1.m<p2.m;
}
}obj1;
int main()
{
std::vector<Integer> vecInteger;
vecInteger.push_back(Integer(12));
vecInteger.push_back(Integer(13));
vecInteger.push_back(Integer(5));
vecInteger.push_back(Integer(7));
vecInteger.push_back(Integer(9));
Integer obj2(0);
std::sort(vecInteger.begin(),vecInteger.end(),obj1);
std::sort(vecInteger.begin(),vecInteger.end(),obj2);
return 0;
}
答案 4 :(得分:0)
#include<iostream>
#include<vector>
#include<algorithm>
类整数
{
市民:
int m;
整数(int a):m(a){};
};
类CompareParts
{
市民:
bool operator()(const Integer&amp; p1,const Integer&amp; p2)
{
返回p1.m
}
};
int main()
{
std :: vector vecInteger;
vecInteger.push_back(整数(12));
vecInteger.push_back(整数(13));
vecInteger.push_back(整数(5));
vecInteger.push_back(整数(7));
vecInteger.push_back(整数(9));
std::sort(vecInteger.begin(),vecInteger.end(),CompareParts());
typedef vector<Integer>::const_iterator Iter;
Iter beg = vecInteger.begin();
Iter end = vecInteger.end();
for (Iter iter = beg; iter != end; ++iter)
cout << (*iter).m << " ";
cout << endl;
}
输出: 5 7 9 12 13