最好用一个简单的程序来说明这个问题。
#include <iostream>
#include <utility>
void printPoint(std::pair <int, int> point) {
printPoint(point.first, point.second);
}
void printPoint(int x, int y) {
std::cout << x << ' ' << y << std::endl;
}
int main(void) {
std::pair <int, int> point(2, 3);
printPoint(point);
return 0;
}
我想让两个
printPoint
函数通过利用重载来完成同一件事。但是,虽然在printPoint
函数的特定重载(在本例中为单参数)的范围内,但编译器仅允许我使用该特定重载,因此代码无法编译。为什么是这样?此外,是否有任何方法可以缓解此问题,从而不必重复两次重写同一函数体?
最佳答案
声明顺序在这里很重要。
将第二个重载(printPoint(int, int)
)移到第一个重载(printPoint(std::pair <int, int>
)之前;否则,它在第一个重载内是不可见的。即
void printPoint(int x, int y) {
std::cout << x << ' ' << y << std::endl;
}
void printPoint(std::pair <int, int> point) {
printPoint(point.first, point.second);
}
LIVE