||=== Build: Debug in 111 (compiler: GNU GCC Compiler) ===| D:\c\111\main.cpp||In function 'void ask()':| D:\c\111\main.cpp|27|error: too many arguments to function 'void contrl()'| D:\c\111\main.cpp|9|note: declared here| ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
时间: 2025-06-01 17:14:47 浏览: 33
### 解决 C++ 编译错误:too many arguments to function 'void contrl()'
在代码中出现的错误“too many arguments to function 'void contrl()'”表明函数 `contrl()` 的定义与调用不匹配。根据之前的代码示例,`contrl()` 函数被定义为无参数函数,但在 `ask()` 函数中却传递了一个参数给它[^1]。
以下是修正该问题的具体方法:
#### 问题分析
在原代码中,`contrl()` 函数被定义为:
```cpp
void contrl();
```
然而,在 `ask()` 函数中调用时,传递了一个参数:
```cpp
contrl(wantFloor);
```
这导致编译器报告错误,因为 `contrl()` 定义时不接受任何参数。
#### 修正方法
要解决此问题,需要确保函数定义和调用一致。以下是两种可能的修正方式:
#### 方法一:修改函数定义以接受参数
如果 `contrl()` 确实需要一个参数来表示目标楼层,则应修改其定义如下:
```cpp
void contrl(int targetFloor) {
if (targetFloor > currentFloor) {
cout << "电梯正在上升..." << endl;
while (currentFloor < targetFloor) {
currentFloor++;
cout << "当前楼层:" << currentFloor << endl;
}
} else if (targetFloor < currentFloor) {
cout << "电梯正在下降..." << endl;
while (currentFloor > targetFloor) {
currentFloor--;
cout << "当前楼层:" << currentFloor << endl;
}
} else {
cout << "您已经在目标楼层!" << endl;
}
cout << "第" << currentFloor << "层到了" << endl << endl;
}
```
同时,确保在 `ask()` 中正确调用该函数:
```cpp
void ask() {
int wantFloor;
cout << "请输入您要去的楼层(输入0退出程序):" << endl;
cin >> wantFloor;
if (wantFloor == 0) {
cout << "感谢使用电梯控制系统,再见!" << endl;
return;
}
contrl(wantFloor); // 正确传递参数
}
```
#### 方法二:保持函数无参数并调整逻辑
如果 `contrl()` 不需要参数,则应移除调用中的参数,并通过全局变量访问目标楼层。例如:
```cpp
int targetFloor; // 全局变量
void ask() {
cout << "请输入您要去的楼层(输入0退出程序):" << endl;
cin >> targetFloor;
if (targetFloor == 0) {
cout << "感谢使用电梯控制系统,再见!" << endl;
return;
}
contrl(); // 不传递参数
}
void contrl() {
if (targetFloor > currentFloor) {
cout << "电梯正在上升..." << endl;
while (currentFloor < targetFloor) {
currentFloor++;
cout << "当前楼层:" << currentFloor << endl;
}
} else if (targetFloor < currentFloor) {
cout << "电梯正在下降..." << endl;
while (currentFloor > targetFloor) {
currentFloor--;
cout << "当前楼层:" << currentFloor << endl;
}
} else {
cout << "您已经在目标楼层!" << endl;
}
cout << "第" << currentFloor << "层到了" << endl << endl;
}
```
#### 完整修正后的代码示例
以下是一个完整修正后的代码版本,采用方法一:
```cpp
#include <iostream>
using namespace std;
// 全局变量定义
int currentFloor = 1; // 电梯初始在第1层
// 函数声明
void ask();
void contrl(int targetFloor);
// 主函数
int main() {
cout << "欢迎使用电梯控制系统" << endl;
ask();
return 0;
}
// 用户输入目标楼层
void ask() {
int wantFloor;
cout << "请输入您要去的楼层(输入0退出程序):" << endl;
cin >> wantFloor;
if (wantFloor == 0) {
cout << "感谢使用电梯控制系统,再见!" << endl;
return;
}
contrl(wantFloor); // 调用时传递参数
}
// 控制电梯运行
void contrl(int targetFloor) {
if (targetFloor > currentFloor) {
cout << "电梯正在上升..." << endl;
while (currentFloor < targetFloor) {
currentFloor++;
cout << "当前楼层:" << currentFloor << endl;
}
} else if (targetFloor < currentFloor) {
cout << "电梯正在下降..." << endl;
while (currentFloor > targetFloor) {
currentFloor--;
cout << "当前楼层:" << currentFloor << endl;
}
} else {
cout << "您已经在目标楼层!" << endl;
}
cout << "第" << currentFloor << "层到了" << endl << endl;
ask(); // 继续询问用户
}
```
###
阅读全文
相关推荐



















