C++ 重载函数和错误
C++ Overloaded function and errors
在我的main
类中,我有一个指针向量(vector<Corsa*> listaCorse
)
我想将我的Corsa*
对象插入我的有序向量
中所以我创建了一个迭代器,然后listaCorse.begin(), listaCorse.end(), myPointerToTheObject, &sortFunction)
已解决:我不知道为什么,但我只包含算法和向量,现在它可以编译。
我真的不知道为什么,因为我将它们包含在myhugeclass.h文件中,但它有效,没关系
谢谢大家:)
问题:sortFunction是我的"Corsa"类中的一个静态函数。而且它超载了。
这两个原型是:
bool Corsa::cmpCorse(Corsa *a, Corsa *b)
bool Corsa::cmpCorse(Corsa &a, Corsa &b)
显然我想把第一个传递给他,因为我的是一个指针
向量但是我的编译器不太喜欢我的代码,所以它说我"未解析的重载函数类型"
谁能帮我?:)
非常感谢
这是代码片段:
// corsa.h
class Corsa{
...
static int cmpCorsa(const Corsa& a, const Corsa& b);
static int cmpCorsa(const Corsa *a, const Corsa *b);
...
}
// myhugeclass.cpp
int MyHugeClass::addCorsa(Corsa *a){
vector<Corsa*>::iterator low = lower_bound(listaCorse.begin(), listaCorse.end(), c, &Corsa::cmpCorsa);
listaCorse.insert(low, c);
return 0;
}
谢谢:)
编辑:我犯了一个大错误,但与这个错误无关。我传递了错误的函数,我应该传递static bool Corsa::sortCorsa(Corsa *a, Corsa *b)
此外,此函数已重载
正如克里斯所说(谢谢克里斯),我尝试这样做:
int MyHugeClass::addCorsa(Corsa *c){
typedef bool(*Func)(const Corsa*, const Corsa*);
vector<Corsa*>::iterator low = lower_bound(listaCorse.begin(), listaCorse.end(), c, static_cast<Func>(&Corsa::sortCorsa));
listaCorse.insert(low, c);
return 0;
}
现在错误在[Error] no matching function for call to 'lower_bound(std::vector<Corsa*>::iterator, std::vector<Corsa*>::iterator, Corsa*&, bool (*)(const Corsa*, const Corsa*))'
中更改
您可以将其转换为正确的类型:
typedef bool(*Func)(const Corsa*, const Corsa*);
vector<Corsa*>::iterator low = lower_bound(..., static_cast<Func>(&Corsa::sortCorsa));
这是一个完整的示例,它使用 std::sort 进行干净的编译。 注意类型定义和演员表
#include <algorithm>
#include <vector>
struct Corsa
{
static bool cmpCorsa(const Corsa& a, const Corsa& b);
static bool cmpCorsa(const Corsa *a, const Corsa *b);
};
typedef bool (*fn)(const Corsa*, const Corsa*);
int main()
{
std::vector<Corsa*> C;
std::sort(C.begin(), C.end(), static_cast<fn>(&Corsa::cmpCorsa));
}
这是一个答案,然后也许不是...
当使用排序向量(或deques)时,我经常发现使用std::lower_bound
不如使用std::partial_sort
实用:
// assume vec is sorted
size_t const currentSize = vec.size();
vec.push_back(...); // like usual
// or
std::copy(input.begin(), input.end(), std::back_inserter(vec));
std::partial_sort(vec.begin(), vec.begin() + currentSize, vec.end() /*, comparator*/);
它与单次插入std::lower_bound
一样高效,并且在多次插入时有可能更有效率。
注意:调用std::sort
也可以,并且通常优化实现以利用排序运行,但这似乎仍然很浪费。
- 链接器错误:函数的多个定义
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 错误:函数声明符之后的预期函数体
- C 错误 - 函数不能超载
- 如何修复传递参数时调用错误函数的主函数?(C++)
- 错误:函数调用中有两个参数
- 错误:函数不是“类”的静态数据成员 - C++
- C ,G 编译错误函数
- CMake 解析错误函数缺少结尾")"。而是找到带有文本的未终止字符串")
- C++ 错误 函数 2 的多重定义
- 错误:函数调用中从int到int(*)[4]的转换无效
- C++14 自动扣除错误:函数返回一个数组
- 视觉C++错误:函数必须返回一个值
- 错误:函数声明中的两种或多种数据类型
- 错误:函数未在作用域中声明
- rtw_android.c错误:函数“strnicmp”的隐式声明[-Weror=隐式函数声明]
- 错误:函数中的return语句没有值,返回“void*”[-fpermission]
- 简单程序中的链接器错误:函数的多重定义
- 错误:函数参数太多
- 错误:函数__tmaincrtstartup中引用的未解析的外部符号_main