0

我在大学学习 C 并为我的软件开发课分配了作业,它是一个应用程序,询问用户他们想要选择哪种形状,询问他们形状的参数,然后输出面积和体积等。制作后我的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

4

1 回答 1

1

您包括 .c 文件以及导致函数的多个定义的头文件。替换这个

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

有了这个

#include "assignment22d.h"
#include "assignment23d.h"
于 2019-11-16T12:18:13.680 回答