gpt4 book ai didi

c - 函数的多个定义错误

转载 作者:行者123 更新时间:2023-11-30 14:34:38 25 4
gpt4 key购买 nike

我在大学学习 C,并为我的软件开发类(class)布置了作业,它是一个应用程序,询问用户他们想要选择哪种形状,询问他们形状的参数,然后输出面积和体积等.在制作我的 make 文件后,我对每个函数都遇到相同的错误,如下所示

gcc -Wall -ggdb -o assignment2 assignment2.c assignment22d.c assignment23d.c
/tmp/ccb5nvtg.o: In function `squarearea':
/home/stephengannon79/assignment22d.c:16: multiple definition of `squarearea'
/tmp/ccBcrWoo.o:/home/stephengannon79/assignment22d.c:16: first defined here
/tmp/ccb5nvtg.o: In function `squareperi':
/home/stephengannon79/assignment22d.c:23: multiple definition of `squareperi'
/tmp/ccBcrWoo.o:/home/stephengannon79/assignment22d.c:23: first defined here
/tmp/ccb5nvtg.o: In function `rectanglearea':
/home/stephengannon79/assignment22d.c:29: multiple definition of `rectanglearea'
/tmp/ccBcrWoo.o:/home/stephengannon79/assignment22d.c:29: first defined here
/tmp/ccb5nvtg.o: In function `rectangleperi':
/home/stephengannon79/assignment22d.c:36: multiple definition of `rectangleperi'

我有一个主文件、2 个用于声明函数的头文件、2 个用于函数本身的 c 文件和一个 make 文件。任何人都可以看到我的错误并指出我正确的方向吗?谢谢,代码全部在下面

// assignment2.c
//author: Stephen Gannon
//date: 09/11/19
//id: 18240313
/* Purpose: The purpose of this assignment is to use modular programing
to write an application that calculates parameters of a shape such
as area, volume and perimeter depending on user inputed values for sizing.
The application contains a main file, two header files to calculate
for each dimension and a make file for compilation.
*/

#include <stdio.h>
#include <stdlib.h>
#include "assignment22d.h"
#include "assignment23d.h"
#include "assignment22d.c"
#include "assignment23d.c"


int main()
{
char option; //expression to choose between the 2d and 3d shapes

double sqside; //squares side
double sqarea; //square area
double sqperi; //sqaure perimeter

double reclength; //rectangles lentgth
double recwidth; //rectangles width
double recarea; //rectangle area
double recperi; //rectangle perimeter

double circrad; //circles radius
double circarea; //circles area
double circcirc; //circles circumference

double trib; //triangles base length
double trih; //triangles perpendicular height
double tria; //traingles side a
double tric; //triangles side c
double triarea; //triangle area
double triperi; //triangle perimeter

double parab; //parallelograms base
double parah; //parallelograms perpendicular height
double paraa; // parallelograms side a
double paraarea; //parallelogram area
double paraperi; //parallelogram perimeter


double cubeside; //cubes side
double cubearea1; //cube area
double cubevolume; //cube volume

double recprisl; //rectangular prism length
double recprish; //rectangular prism height
double recprisw; //rectangular prism width
double recprisarea; //rectangular prism area
double recprisvolume; //rectangular prism volume

double sphrad; //spheres radius
double spharea; //spheres area
double sphvolume; //spheres volume

double rccr; //right circular cylinder radius
double rcch; //right circular cylinder height
double rccarea; //right circular cylinder area
double rccvol; //right circular cylinder volume


printf("Please choose an object:\na-sqaure\nb-rectangle\nc-circle\nd-triangle\ne-parallelogram\nf-cube\ng-rectangular prism\nh-sphere\ni-right circular cylinder\n-----------------------------\n");
scanf("%c", &option); //scans in the value of option

switch(option) //switch cases, the shapes are lettered a to i
{
case 'a': //square
printf("Please enter the length of the side:\n");
scanf("%lf", &sqside);
sqarea = squarearea(sqside);
printf("The squares area is: %lf\n", sqarea);
sqperi = squareperi(sqside);
printf("The squares perimeter is: %lf\n", sqperi);
break;

case 'b': //rectangle
printf("Please enter the length and width:\n");
scanf("%lf %lf", &reclength, &recwidth);
recarea = rectanglearea(reclength, recwidth);
printf("The rectangles area is: %lf\n", recarea);
recperi = rectangleperi(reclength, recwidth);
printf("The rectangles perimeter is: %lf\n", recperi);
break;

case 'c': //circle
printf("Please enter the radius:\n");
scanf("%lf", &circrad);
circarea = circlearea(circrad);
printf("The circles area is: %lf\n", circarea);
circcirc = circlecirc(circrad);
printf("The circles circumference is: %lf\n", circcirc);
break;

case 'd': //triangle
printf("Please enter the base length, height and other sides a and c:\n");
scanf("%lf %lf %lf %lf", &trib, &trih, &tria, &tric);
triarea = trianglearea(trib, trih, tria, tric);
printf("The triangles area is: %lf\n", triarea);
triperi = triangleperi(trib, trih, tria, tric);
printf("The triangles perimeter is: %lf\n", triperi);
break;

case 'e': //parallelogram
printf("Please enter the base, height and side a:\n");
scanf("%lf %lf %lf", &parab, &parah, &paraa);
paraarea = parallelogramarea(parab, parah, paraa);
printf("The parallelograms area is: %lf\n", paraarea);
paraperi = parallelogramperi(parab, parah, paraa);
printf("The parallelograms perimeter is: %lf\n", paraperi);
break;

case 'f': //cube
printf("Please enter the length of the side:\n");
scanf("%lf", &cubeside);
cubearea1 = cubearea(cubeside);
printf("The cubes area is: %lf\n", cubearea1);
cubevolume = cubevol(cubeside);
printf("The cubes volume is: %lf\n", cubevolume);
break;

case 'g': //rectangular prism
printf("Please enter the length, height and width:\n");
scanf("%lf %lf %lf", &recprisl, &recprish, &recprisw);
recprisarea = rectangularprismarea(recprisl, recprish, recprisw);
printf("The rectangular prisms area is: %lf\n", recprisarea);
recprisvolume = rectangularprismvol(recprisl, recprish, recprisw);
printf("The rectangular prisms volume is: %lf\n", recprisvolume);
break;

case 'h': //sphere
printf("Please enter the radius:\n");
scanf("%lf", &sphrad);
spharea = spherearea(sphrad);
printf("The spheres area is: %lf\n", spharea);
sphvolume = spherevol(sphrad);
printf("The spheres volume is: %lf\n", sphvolume);
break;

case 'i': //right circular cyclinder
printf("Please enter the radius and height:\n");
scanf("%lf %lf", &rccr, &rcch);
rccarea = rightcylarea(rccr, rcch);
printf("The right circular cylinders area is: %lf\n", rccarea);
rccvol = rightcylvol(rccr, rcch);
printf("The right circular cylinders volume is: %lf\n", rccvol);
break;

case '\n':
break;

default: //handles if any value other than a to i is inputted
printf("Error! The value you entered is incorrect!\n");

}


return 0;
}
#ifndef HEADER_FILE2D
#define HEADER_FILE2D

double squarearea(double sqside); //declaring square area function
double squareperi(double sqside); //declaring square perimeter function

double rectanglearea(double reclength, double recwidth); //declaring rectangle area function
double rectangleperi(double reclength, double recwidth); //declaring rectangle perimeter function

double circlearea(double circrad); //declaring circle area function
double circlecirc(double circrad); //declaring circle circumference function

double trianglearea(double trib, double trih, double tria, double tric); //declaring triangle area function
double triangleperi(double trib, double trih, double tria, double tric); //declaring triangle perimeter function

double parallelogramarea(double parab, double parah, double paraa); //declaring parellelogram area function
double parallelogramperi(double parab, double parah, double paraa); //declaring parellelogram perimeter function

#endif
//assignment22d.c
//author: Stephen Gannon
//date: 10/11/19
//id: 18240313
/* Purpose: A file that contains all the functions necessary to
calculate the peramteres for the 2d shapes, as well as a defined Pi.
*/

#ifndef assignment22d
#define assignment22d
#define Pi 3.141593
#define circarea(circrad) (Pi)*(circrad*circrad)
#define circcirc(circrad) 2*(Pi)*circrad

double squarearea(double sqside)
{
double sarea; //squares area
sarea = sqside*sqside;
return sarea;
}

double squareperi(double sqside)
{
double speri; //square perimeter
speri = 4*sqside;
return speri;
}
double rectanglearea(double reclength, double recwidth)
{
double rarea; //rectangles area
rarea = reclength*recwidth;
return rarea;
}

double rectangleperi(double reclength, double recwidth)
{
double rperi; //rectangles perimeter
rperi = (2*reclength)+(2*recwidth);
return rperi;
}

double circlearea(double circrad)
{
double carea; //circles area
carea = circarea(circrad);
return carea;
}

double circlecirc(double circrad)
{
double cperi; //circles perimeter
cperi = circcirc(circrad);
return cperi;
}

double trianglearea(double trib, double trih, double tria, double tric)
{
double tarea=0; //triangles area
tarea = (trib*trih)/2;
return tarea;
}

double triangleperi(double trib, double trih, double tria, double tric)
{
double tperi; //triangles perimeter
tperi = trib+tria+tric;
return tperi;
}

double parallelogramarea(double parab, double parah, double paraa)
{
double parea=0; //parallelograms area
parea = parab*parah;
return parea;
}

double parallelogramperi(double parab, double parah, double paraa)
{
double pperi; //parallelograms perimeter
pperi = (2*paraa)+(2*parab);
return pperi;
}


#endif
//assignment23d.h
//author: Stephen Gannon
//date: 15/11/19
//purpose: To declare the functions for all 3d shapes

#ifndef HEADER_FILE3D
#define HEADER_FILE3D

double cubearea(double cubeside); //declaring cube area function
double cubevol(double cubeside); //declaring cube volume function

double rectangularprismarea(double recprisl, double recprish, double recprisw); //declaring rectangular prisms area function
double rectangularprismvol(double recprisl, double recprish, double recprisw); //declaring rectangle prisms volume function

double spherearea(double sphrad); //declaring spheres area function
double spherevolume(double sphrad); //declaring circle circumference function

double rightcylarea(double rccr, double rcch); //declaring cylinder area function
double rightcylvol(double rccr, double rcch); //declaring cylinder volume function

#endif
//assignment23d.c
//author: Stephen Gannon
//date: 11/11/19
//id: 18240313
/* Purpose: A header file that contains all the functions necessary to
calculate the peramteres for the 3d shapes, as well as a defined Pi.
*/

#ifndef assignment23dHead
#define assignment23dHead
#define Pi 3.141593
#define csarea(cubeside) 6*(cubeside*cubeside)
#define cvolume(cubeside) (cubeside*cubeside*cubeside)


double cubearea(double cubeside)
{
double cuarea; //cubes area
cuarea = csarea(cubeside);
return cuarea;
}

double cubevol(double cubeside)
{
double cuvol; //cubes volume
cuvol = cvolume(cubeside);
return cuvol;
}

double rectangularprismarea(double recprisl, double recprish, double recprisw)
{
double recprisarea; //rectangular prisms surface area
recprisarea = (2*recprisl*recprisw)+(2*recprisl*recprish)+(2*recprisw*recprish);
return recprisarea;
}

double rectangularprismvol(double recprisl, double recprish, double recprisw)
{
double recprisvol; //rectangular prisms volume
recprisvol = recprisl*recprisw*recprish;
return recprisvol;
}

double spherearea(double sphrad)
{
double spherearea; //spheres surface area
spherearea = 4*Pi*(sphrad*sphrad);
return spherearea;
}

double spherevol(double sphrad)
{
double spherevol; //spheres volume
spherevol = (4*Pi*(sphrad*sphrad*sphrad))/3;
return spherevol;
}

double rightcylarea(double rccr, double rcch)
{
double cylinderarea; //right circular cylinders surface area
cylinderarea = (2*Pi*rccr*rcch)+(2*Pi*(rccr*rccr));
return cylinderarea;
}

double rightcylvol(double rccr, double rcch)
{
double cylindervol; //right circular cylinders volume
cylindervol = Pi*rcch*(rccr*rccr);
return cylindervol;
}

#endif
assignment2: assignment2.c assignment22d.c assignment23d.c assignment22d.h assignment23d.h
gcc -Wall -ggdb -o assignment2 assignment2.c assignment22d.c assignment23d.c

最佳答案

您将 .c 文件与头文件一起包含在内,这会导致函数有多个定义。替换这个

#include "assignment22d.h"
#include "assignment23d.h"
#include "assignment22d.c"
#include "assignment23d.c"

有了这个

#include "assignment22d.h"
#include "assignment23d.h"

关于c - 函数的多个定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58890603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com