c++ - 重载函数 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;
}
错误信息:
解决方案
你用两个参数声明一个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
{
...
}
请注意,函数定义中不需要默认值,因为它们已经在声明中。
推荐阅读
- css - :before 上的多行链接动画
- reactjs - 在 BotFramework WebChat 中压缩 botframework 文件上传图像?
- c# - Xamarin Forms (C#) - 从 Picker.SelectedIndexChanged 调用 Navigation.PushModalAsync 会引发空引用异常
- python - 如何在使用 SimpleITK 保存 DICOM 文件时保留 UID?
- html - html:表格的行和列的不同颜色
- ios - 如何在 iOS 中分发内部应用程序
- java - 如何将 JSON 中 Java 对象的实例类型发送到 Java Spring-Server Post 请求?
- python - TypeError: copy() 在 Python 3.x 中不接受关键字参数
- java - Spring WebClient 调用两个依赖的API
- android - 使用 app bundle 时禁用或减少 app 压缩