C ++ Vector排序奇怪甚至停留

时间:2016-11-07 07:39:18

标签: c++ sorting vector

这段代码怎么了?我想排序奇数,但即使留在他们的位置,为此功能,但编译器不会通过这个

有错误:

  

错误:必须调用对非静态成员函数的引用

并且有一个代码:

public:
std::vector<int> sortArray(std::vector<int> array)
{
   std::vector<int> sortedArray(array);
   std::sort ( sortedArray.begin() , sortedArray.end() , oddSort );
}

bool oddSort ( const int& left , const int& right ){
  if ( left % 2 && right % 2 )
    return left < right;
  else if ( left % 2 )
    return false;
  else if ( right % 2 )
    return true;
  return left < right;
}

3 个答案:

答案 0 :(得分:2)

sort不是类的方法,因此它没有正确的this指针,因此调用成员函数是个问题。

  

在任何上下文中使用非静态类成员时   允许使用this关键字(非静态成员函数体,成员   初始化列表,默认成员初始化者),隐含的这个 - &gt;   在名称之前自动添加,从而导致成员访问   表达式(如果成员是虚拟成员函数,则结果   在虚拟函数调用中)。

http://en.cppreference.com/w/cpp/language/this

答案 1 :(得分:1)

Danh的评论是对的,但这实际上是一个重复的问题。但是,目前还没有重复的答案。

所以:问题是成员函数需要一个static指针,除非它们是std::sort。并且this不会给你一个static指针,你也不需要它。因此,使select regexp_substr('aUNITED STATES :bUSCOMPANY,c7/1990.','[a-z](.*)[a-z](.*)[a-z](.*)',1,1,null,1) , regexp_substr('aUNITED STATES :bUSCOMPANY,c7/1990.','[a-z](.*)[a-z](.*)[a-z](.*)',1,1,null,2) , regexp_substr('aUNITED STATES :bUSCOMPANY,c7/1990.','[a-z](.*)[a-z](.*)[a-z](.*)',1,1,null,3) from dual; 成为直接的解决方案。

答案 2 :(得分:0)

我建议你看一下enter image description here。非静态成员函数和静态成员函数的类型之间存在差异。我相信cpp概念this需要像静态的那样