gpt4 book ai didi

c++ - std::min_element 编译错误

转载 作者:行者123 更新时间:2023-11-27 23:22:42 27 4
gpt4 key购买 nike

当我使用 std::min_element 时,我一直在为 C2440 编译错误而苦苦挣扎:

struct compare_x_coordinate 
{
bool operator() (Geocoordinatefloat i,Geocoordinatefloat j) { return i.x_<j.x_; }
} mycompare;

vector<Geocoordinatefloat>::iterator it_min;
vector<Geocoordinatefloat> ptArray;
ptArray.push_back(...)
ptArray.push_back(...)
...

it_min = std::min_element(ptArray.begin(),ptArray.end(),mycompare); // Line 475 Compiling error C2440

std::min_element(ptArray.begin(),ptArray.end(),mycompare); // Right

用VC2010编译报错是:

Error   19  error C2440: '=' : cannot convert from 'const geometric::Geocoordinate<T> ' to 'geometric::Geocoordinate<T> *'  c:\research\projectivecorrection\code\iris\geometriccorrection\src\correspondingpoints\cp_hybrid.cpp    475

确实Geocoordinatefloat是一个复杂的类,如果我重新定义类Geocoordinatefloat很简单:

class Geocoordinatefloat
{
public:
int x;
int y;
float Func()
{
return 1;
};
virtual void Fun2()
{
cout<<"hello"<<endl;
};

};

它会起作用的。但是对于我的程序来说,不可能改变类 Geocoordinatefloat 的定义。我想知道 Geocoordinatefloat 中的哪个元素会导致编译错误。抱歉,我无法给出 Geocoordinatefloat 的定义,因为它是一个非常大的类。感谢您的任何建议。

编辑:根据请求,我制作了一个简单的程序来重复错误:

#include <iostream>
#include <vld.h>
#include <map>
#include <set>
#include <iostream>
#include <algorithm>
#include <vector>


using namespace std;



template <typename T>
class Geocoordinate
{
public:
Geocoordinate() {};
~Geocoordinate() {};
T x_;
T y_;
};

typedef Geocoordinate<float> Geocoordinatefloat;
typedef vector<Geocoordinatefloat> PointArray;


struct compare_x_coordinate
{
bool operator() (const Geocoordinatefloat &i,const Geocoordinatefloat &j) { return i.x_<j.x_; }
} mycompare;

void find_left_right_eignpoints(const PointArray &ptArray,
Geocoordinatefloat &left)
{
vector<float> x_cord;
PointArray::iterator it_min;
std::min_element(ptArray.begin(),ptArray.end(),mycompare);

/******************************************************************************************
// Error 1 error C2440: '=' : cannot convert from 'const Geocoordinate<T>
// ' to 'Geocoordinate<T> *' c:\main.cpp 41
*/
it_min = std::min_element(ptArray.begin(),ptArray.end(),mycompare); // error code is here

int index_min = it_min-ptArray.begin();
left = ptArray[index_min];

}



int main(int argc, char* argv[])
{


return 0;

}

最佳答案

问题是 ptArrayconst。这意味着 begin()end() 返回 const_iterator;将它们作为参数的 min_element 的特化也是如此。

const_iterator 不能赋给iterator 类型的变量,因此您需要将it_min 的类型更改为PointArray::const_iterator.

关于c++ - std::min_element 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com