Vuq*_*zov 2 c++ pointers function
这个错误意味着什么?为什么当我将所有类型都加倍时,它不会显示相同的错误?
C2556'int div(int,int)':重载函数的区别仅在于'div_t div(int,int)'返回类型'C2371'div
':redefinition; 不同的基本类型
C2491'div':不允许定义dllimport函数
C2664'int calculate(int,int,int(__ cdecl*)(int,int))':不能将参数3从'overloaded-function'转换为'int( __cdecl*)(int,int)'
#include <iostream>
using namespace std;
int sum(int x, int y) {
return x + y;
}
int subs(int x, int y) {
return x - y;
}
int mult(int x, int y) {
return x * y;
}
int div(int x, int y) {
return x / y;
}
int calculate(int x, int y, int(*func)(int, int)) {
return func(x, y);
}
void main() {
cout<<"Sum:"<< calculate(8, 4, sum)<<endl;
cout << "Subs:" << calculate(8, 4, subs) << endl;
cout << "Mult:" << calculate(8, 4, mult) << endl;
cout << "Div:" << calculate(8, 4, div) << endl;
}
Run Code Online (Sandbox Code Playgroud)
标准头中存在一个包含的div函数,因此您的重载与之冲突.stdlib.hiostream
一种方法是使用自己的命名空间(使用命名空间总是一个好主意),如下所示:
#include <iostream>
namespace my {
int sum(int x, int y) {
return x + y;
}
int subs(int x, int y) {
return x - y;
}
int mult(int x, int y) {
return x * y;
}
int div(int x, int y) {
return x / y;
}
int calculate(int x, int y, int(*func)(int, int)) {
return func(x, y);
}
}
int main() {
std::cout << "Sum:" << my::calculate(8, 4, my::sum) << std::endl;
std::cout << "Subs:" << my::calculate(8, 4, my::subs) << std::endl;
std::cout << "Mult:" << my::calculate(8, 4, my::mult) << std::endl;
std::cout << "Div:" << my::calculate(8, 4, my::div) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用一些较短的替代方案using:
...
namespace my { ... }
using my;
...
std::cout << "Sum:" << my::calculate(8, 4, sum) << std::endl;
std::cout << "Subs:" << my::calculate(8, 4, subs) << std::endl;
std::cout << "Mult:" << my::calculate(8, 4, mult) << std::endl;
std::cout << "Div:" << my::calculate(8, 4, my::div) << std::endl; // scoped to eliminate ambiguity
Run Code Online (Sandbox Code Playgroud)