为啥我的前向声明不起作用? (简单功能)

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) 12 将被用户输入忽略和覆盖。如果函数要读取用户输入,则参数是无用的,应该删除。否则,应该在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 内不起作用,但在桌面上却起作用?

如果我在函数顶部切换注释行的位置,为啥我的代码不起作用?这是一个记忆召回声明[关闭]

为啥我的打印功能不起作用?链表

为啥我的简单不匹配查询不起作用?

为啥我的简单 C 宏不起作用?