gpt4 book ai didi

C++ 重载函数调用自身的更多参数版本

转载 作者:太空狗 更新时间:2023-10-29 23:32:59 26 4
gpt4 key购买 nike

我正在使用函数重载来获得行为的一般版本和更常见的行为。通常的函数只是为实际上依赖于第一个参数的第二个参数选择一个默认值,编译器给我一个错误,因为它甚至不识别第二个函数的存在。我也尝试用默认值来做,但是因为默认值取决于第一个参数,所以编译器似乎不接受它。

因此,这里有一些简化的示例,仅供说明之用。函数重载案例:

#include <stdio.h>  
struct pair {
int x;
int y;
};

int func(pair a){
return func(a, a.y);
}

int func(pair a, int b) {
return a.x*b;
}

int main() {
pair z;
z.x = 2;
z.y = 4;
printf("%d\n", func(z));
printf("%d\n", func(z,12));
}

这给了我错误:

a.c: In function ‘int func(pair)’:
a.c:9:21: error: too many arguments to function ‘int func(pair)’
a.c:8:5: note: declared here"

默认值示例:

#include <stdio.h>

struct pair {
int x;
int y;
};


int func(pair a, int b = a.y) {
return a.x*b;
}
int main() {
pair z;
z.x = 2;
z.y = 4;
printf("%d\n", func(z));
printf("%d\n", func(z,12));
}

给我以下错误:“局部变量 a 可能不会出现在这个上下文中”

那么,C++ 中有什么方法可以模拟这种行为吗?我从来没有在其他语言中遇到过这个问题,比如 Java 甚至 ASP。

谢谢大家

最佳答案

在 C 和 C++ 中,在函数调用之前,应该声明或定义该函数。在这里,您正在调用 return func(a, a.y); 但函数 func(pair, int) 尚未声明或定义。

您需要更改这两个函数的定义,或者只在代码开头声明函数。正如其他答案已经解释了第一种方法,这里是第二种方法的片段。

  #include <stdio.h> 
//Function Declaration
int func(pair);
int func(pair, int);
struct pair {
int x;
int y;
};

int func(pair a){
return func(a, a.y);
}

int func(pair a, int b) {
return a.x*b;
}

int main() {
pair z;
z.x = 2;
z.y = 4;
printf("%d\n", func(z));
printf("%d\n", func(z,12));
}

关于C++ 重载函数调用自身的更多参数版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com