为啥我的前向声明不起作用? (简单功能)
Posted
技术标签:
【中文标题】为啥我的前向声明不起作用? (简单功能)【英文标题】:Why is my forward declaration not working?? (simple function)为什么我的前向声明不起作用? (简单功能) 【发布时间】:2020-12-17 15:47:53 【问题描述】:#include < iostream >
#include "main.h"
int main()
std::cout << "x + y is: " << getInteger() << std::endl;
return 0;
int getInteger(int x, int y)
std::cout << "Enter an integer: ";
std::cin >> x;
std::cin >> y;
return x + y;
“main.h”文件包含在与函数相同的源文件中,包含以下代码:
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
int getInteger(int x, int y);
#endif // MAIN_H_INCLUDED
我不知道为什么文件的标题后面是大写的“包含”,这只是我通过IDE创建头文件后出现的默认格式。
当我尝试构建此功能时,我收到以下错误:
error: too few arguments to function 'int getInteger(int, int)'
【问题讨论】:
前向声明工作正常,但是一个名为getInteger
的函数接受 2 个参数与一个名为 getInteger
的函数完全不同,它不接受任何参数。此外,那些有趣的INCLUDED
行被称为header guards。
我试过放 2 个参数或零,错误仍然存在。现在我已经添加了两个参数,但它已经改变了,error:expected primary expression before 'int'。
"我不知道为什么文件的标题后面是大写的“包含”" - 它被称为header guard。
在我看来,getInteger
有任何参数都是错误的。该函数不需要任何外部输入,它从std::cin
获取值。
错误信息 "error: too many arguments to function 'int getInteger(int, int)'" 表明编译器确实找到了你的前向声明,否则它不会知道getInteger
应该有多少个参数。您只是在main
中错误地使用了getInteger
。
【参考方案1】:
很明显你是想写这个函数
int getInteger()
int x, y;
std::cout << "Enter an integer: ";
std::cin >> x;
std::cin >> y;
return x + y;
这是一个零参数的函数,这是你从 main 调用函数时给出的。
你实际编写的函数有两个参数,这就是错误消息告诉你的,当你调用函数时你没有提供足够的参数。
【讨论】:
【参考方案2】:你调用没有参数的函数
getInteger()
但是一个同名的函数是用两个参数声明的
int getInteger(int x, int y);
此外,函数中未使用的值
int getInteger(int x, int y)
std::cout << "Enter an integer: ";
std::cin >> x;
std::cin >> y;
return x + y;
【讨论】:
一分钟,cin 算不算使用这些参数?怎么不用? 该函数使用变量,而不是值,它们最初必须设置为只是为了进行函数调用,即在getInteger(1, 2)
1
和 2
将被用户输入忽略和覆盖。如果函数要读取用户输入,则参数是无用的,应该删除。否则,应该在main()
中读取用户输入,然后将其作为参数传递给函数。【参考方案3】:
这里有很多问题,正如已经指出的那样,您在 getInteger() 函数中要求参数,然后在 main 中不提供任何参数。
#include <iostream>
int getInteger()
int x, y;
std::cout << "Enter an integer: ";
std::cin >> x;
std::cout << "Enter another integer: ";
std::cin >> y;
return x + y;
int main()
std::cout << "x + y is: " << getInteger() << std::endl;
return 0;
这将编译,不需要头文件,我已经修改了你的函数,所以它可以按照我相信的那样工作。
【讨论】:
是的,我只是用它来测试头文件,看看它们是如何工作的。 酷我喜欢这些人的教程:youtube.com/watch?v=9RJTQmK0YPI 这个是关于头文件的,还有这个人 youtube.com/watch?v=Zbw58vTotok&t=618s 这是关于循环依赖的,这可能很快就会把你搞砸:-) 我正在使用这个learncpp.com,2 天前开始使用,发现 C++ 很有趣。该语言确实看起来很有用且有益,我一定会稍后检查那个人! 酷,C++ 很棒,但相当复杂。我已经学习了一段时间了,当事情没有按照你的方式进行时,它很糟糕,但是当你最终破解它时,它就太好了。继续加油!以上是关于为啥我的前向声明不起作用? (简单功能)的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的点击功能在移动设备上的这个 SVG 内不起作用,但在桌面上却起作用?