我有以下设置:
std::vector<Data2DController*> controllers2d; // this is defined in the header
bool comp(const Data2DController* c1, const Data2DController* c2) {
return true;
};
inline std::vector<Visualizer*> MainController::gatherVisualizers() const {
std::vector<Visualizer*> visualizers;
// selected only the biggest cooridante system
Data2DController* biggestRadiusController = *std::max(controllers2d.begin(), controllers2d.end(), comp);
visualizers.push_back(biggestRadiusController->getCoordinatesVisualizer());
return visualizers;
}
目前我的函数真的是这样的,为了简单起见,其他的都被注释掉了。
不幸的是,我收到以下错误(两个输入参数有 4 个相同的错误):
Error 5 error C2664: 'bool (Controllers::Data2DController *,Controllers::Data2DController *)' : cannot convert argument 1 from 'const std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<Controllers::Data2DController *>>>' to 'Controllers::Data2DController *' C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 521 1
我不知道为什么它不能编译,我能找到的所有示例都带有比较函数,该函数传递给应用于指针 vector 的算法,看起来几乎相同。
最佳答案
std::max(controllers2d.begin(), controllers2d.end(), comp);
会比较迭代器(而 comp
会比较元素(指针在你的情况下)所以编译错误)。
std::max_element(controllers2d.begin(), controllers2d.end(), comp);
会比较指针(如 comp
)。
关于c++ - 无法为指针 vector 编译比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24086677/