【问题标题】: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

标签: c++ file header format declaration


【解决方案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++ 很棒,但相当复杂。我已经学习了一段时间了,当事情没有按照你的方式进行时,它很糟糕,但是当你最终破解它时,它就太好了。继续加油!
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2013-01-17
    相关资源
    最近更新 更多