首页 > 解决方案 > 重载函数 area() 以计算两个不同形状的面积,但我收到错误消息“未定义的引用”

问题描述

C++ - 我应该通过重载 area() 函数来计算两个形状的面积,我想要解决问题的方法是将常量的值作为默认参数传递给两个函数,正如问题陈述所要求的那样我为每个形状写一个。但是当我尝试编译代码时,我收到两个函数的错误消息“未定义的引用”。现在我可以立即在网上查找它,但我想知道我哪里出错了。

我正在使用 Ubuntu 16.04。

#include<iostream>
#include<math.h>

using namespace std;

double area(int r, float pi=3.14);    //prototype for calculating the area of circle
double area(int l, int h, float a=0.5);    //prototype for area of triangle

int main()
{
    int l, r, h;

    cout<<"Enter the radius of the circle\n";    //accepting radius
    cin>>r;

    cout<<"Enter length of one side and height of triangle\n";    //accepting length and height
    cin>>l>>h;

    cout<<"Area of circle is = "<<area(r)<<"\n\n";
    cout<<"Area of triangle is = "<<area(l, h)<<"\n";
}

double area(int r)    //declaration for circle, passing radius accepted and pi as default parameter
{
    float pi;

    double z = r*r*pi;

    return z;
}

double area(int l, int h)    //declaration for triangle passing l and b accepted, and 0.5 as default parameter
{
    float a;

    double z = l*h*a;

    return z;
}

错误信息:

X

标签: c++parameter-passingoverloading

解决方案


你用两个参数声明一个area函数,另一个用三个参数声明。但是您永远不会定义这些功能!您的area函数定义适用于一个具有一个参数的函数,一个具有两个参数的函数。

定义需要所有参数,与声明中的参数相匹配:

double area(int r, float pi)    //definition for circle, passing radius accepted and pi as default parameter
{
    ...
}

double area(int l, int h, float a)    //definition for triangle passing l and b accepted, and 0.5 as default parameter
{
    ...
}

请注意,函数定义中不需要默认值,因为它们已经在声明中。


推荐阅读