C++如何为重载函数编写原型声明?相关报错如何解决?
结论
C++完全支持为重载函数编写原型声明,你遇到的报错是声明不全导致的,和重载的原型支持无关。
报错原因
编译器从上到下逐行解析代码时,在main函数调用rectangle(3)的节点,只找到了你提前声明的双参数版本int rectangle(int p, int l);,没有匹配到单参数版本的声明或定义,因此触发编译错误。
正确实现方案
所有要在调用点后才给出定义的重载版本,都需要提前编写对应的原型声明,修改后的可运行代码如下:
#include <iostream> using namespace std; // 补充所有重载版本的原型声明 int rectangle(int p); int rectangle(int p, int l); int main() { cout << rectangle(3) << endl; // 输出9 cout << rectangle(3, 4) << endl; // 输出12 return 0; } int rectangle(int p) { return p * p; } int rectangle(int p, int l) { return p * l; }
注意事项
- 重载函数的区分依据是参数的数量、类型、排列顺序,返回值类型不参与重载区分,不要仅修改返回值来实现重载,编译器无法识别
- 如果某一个重载版本的定义写在调用点之前,可以不用单独写原型声明,定义本身会被编译器识别为声明
内容的提问来源于stack exchange,提问作者Hanif Ramadhani
相关产品推荐
相关产品推荐

