【问题标题】:C++: Undefined reference to void functionC++:对 void 函数的未定义引用
【发布时间】:2016-02-19 08:17:12
【问题描述】:

关于

此程序应通过将当前日期(用户输入的月份和年份)与给定的月份和年份进行比较来返回年龄。

我试图用两个函数创建这个程序。 'int age()' 计算年龄,而'char cont()' 允许用户继续输入数据。

问题

在尝试编译时,我收到以下消息:

对`age(int, int, int, int, int&, int&, char)'的未定义引用

问题

我该如何解决这个问题?

相关计划:

#include<iostream>
#include<string>

using namespace std;

void age (int month_now, int year_now, int month_birth, int year_birth, int& age_year, int& age_month, char letter);  


char cont ();

int main ()

{

int month_now;
int year_now;
int month_birth;
int year_birth;
int age_year;
int age_month;
char again;
char y;

cout<<"Enter today's 4-digit year: :"<<endl;
cin>>year_now;

cout<<"Enter today's 2-digit month number: "<<endl;
cin>>month_now;

cout<<"Enter the 4-digit year of your birth: "<<endl;
cin>>year_birth;

cout<<"Enter the 2-digit month number of your birth: "<<endl;
cin>>month_birth;

age(year_now, year_birth, month_now, month_birth, age_year, age_month, again);


return 0;
}


void age (int month_now, int year_now, int month_birth, int year_birth, int& age_year, int& age_month, char letter, char y)
{
do{

if (month_now<month_birth)
 {
    age_year=year_now-year_birth-1;
    age_month=month_now-month_birth+12;

 }
else
 {
    age_year=year_now-year_birth;
    age_month=month_now-month_birth;

 }

char cont ();

}while (letter==y);
}


char cont (string message)
{
    char letter;

    cout<<"Do you wish to find another age? (y/n)"<<endl;
    cin>>letter;

    letter= tolower(letter);

    return letter;
}

【问题讨论】:

  • age 的签名在声明中与定义不同,你缺少char y
  • 顺便说一句,变量again 永远不会被初始化。
  • cont 函数的原型也不一致。它不会导致链接错误的原因是你从不调用它。

标签: c++ function compiler-errors


【解决方案1】:

与函数原型相比,您的age定义多了一个char 参数。

您需要确保函数名称和参数类型(不是参数名称)匹配。

此外,将未初始化变量again按值传递给函数的行为是未定义。要么在 main 中初始化它,要么通过引用传递它并确保函数初始化它。

【讨论】:

    【解决方案2】:

    原因是age函数的调用是根据文件顶部的声明来完成的。然而,底部的这个函数的实现有不同的签名——它有一个额外的参数char y。因此它可以编译,但无法链接,因为声明对应的函数没有实现。

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 2021-10-28
      • 2011-12-14
      • 1970-01-01
      相关资源
      最近更新 更多