如何从单独的.cpp文件中调用函数?

时间:2016-10-08 23:23:06

标签: c++ c

所以这是我想要解决的原始问题;

*创建一个名为Lab5_Figures的项目。该项目应包含多个文件。编写一个程序,重复要求用户选择方形,左或右三角形,然后输入图形大小,然后在星形中打印适当的形状。对于square,程序应该询问用户是想要填充还是空心方块。如果用户输入无效选项,程序应该退出。请参阅下面的示例对话框:

  1. 左下角三角形
  2. 右上角三角形
  3. 选择数字:1

    选择尺寸:4

    填充或空心[f / h]:h

    //打印出适当的数字,然后重复

    1. 左下角三角形
    2. 右上角三角形 ...
    3. 您可以重用循环实验室中的代码(我已经这样做了)。将星号打印代码放在四个独立的函数中:filledSquare,hollowSquare,leftTriangle和rightTriangle。每个函数都应该接受一个整数参数 - 图的大小并且不返回任何值(是一个void函数)。创建三个单独的文件figures.cpp,figures.h和figuresInput.cpp。将三角形和方形函数定义放在figure.cpp中,将它们的原型放在figure.h中。确保头文件受到多重包含的保护。将main函数放在figuresInput.cpp *。

      好的,很酷。现在这是我的档案; (如果格式化已关闭,我道歉:()

      figuresInput.cpp

      // This program creates shapes based on user input
      
      
      #include <iostream>
      #include <string>
      #include "figures.h"
      
      using std::cin; using std::cout; using std::string; using std::endl;
      
      int main()
      {
          int option = 1;
      
      while (option == 1 || option == 2 || option == 3)
      {
          //determine choice
          cout << "1. Square" << endl << "2. Left Triangle" << endl << "3. Right Triangle" << endl;
          cout << "Select an option: ";
      
          cin >> option;
      
          if (option == 1)
          {
              char fillHollow;
      
              cout << "Filled or hollow? [f/h]";
              cin >> fillHollow;
      
              if (fillHollow == 'f')
              {
                  int size;
      
                  cout << "Input Size: ";
                  cin >> size;
      
                  void filledSquare(int size);
              }
      
              else if (fillHollow = 'h')
              {
                  int size;
      
                  cout << "Input Size: ";
                  cin >> size;
      
                  void hollowSquare(int size);
              }
          }
      
          else if (option == 2)
          {
              int size;
      
              cout << "Input Size: ";
              cin >> size;
      
              void leftTriangle(int size);
          }
      
          else if (option == 3)
          {
              int size;
      
              cout << "Input Size: ";
              cin >> size;
      
              void rightTriangle(int size);
          }
      
          else
              exit(EXIT_FAILURE);
      }
      } //end main
      

      figures.cpp

      //function defintions
      
      #include "figures.h"
      #include <iostream>
      
      using std::cin; using std::cout; using std::string; using std::endl;
      
      void filledSquare(int a)
      {
      //print stars for first square
      for (int b = 0; b < a; b++)
      {
          for (int c = 0; c < a; c++)
              cout << "*";
          cout << endl; //new line
      }
      cout << endl; //new line
      
      } //end
      
      void hollowSquare(int a)
      {
      for (int b = 0; b < a; b++)
      {
          int spaces = a - 2;
          if (b == 0 || b == (a - 1))
          {
              for (int i = 0; i < a; i++)
                  cout << "*";
              cout << endl;  //new line
          }
          else
          {
              cout << "*";
              for (int i = 0; i < spaces; i++)
                  cout << " ";
              cout << "*";
              cout << endl;  //new line
          }
      }
      } //end
      
      void leftTriangle(int a)
      {
      //get user input and print stars for first triangle
      for (int b = a; b < a; b--)
      {
          for (int c = 0; c < b; c++)
              cout << "*";
          cout << endl; //new line
      }
      cout << endl; //new line
      } //end
      
      void rightTriangle(int a)
      {
      //get user input and print stars for second triangle
      for (int b = 0; b < a; b++)
      {
          int stars = a - b;
          for (int i = 0; i < b; i++)
              cout << " ";
          for (int i = 0; i < stars; i++)
              cout << "*";
          cout << endl; //new line
      }
      cout << endl; //new line
      } //end
      

      最后是figure.h

      //funtion prototypes
      
      #ifndef FIGURES_H
      #define FIGURES_H
      
      void filledSquare(int);
      
      void hollowSquare(int);
      
      void leftTriangle(int);
      
      void rightTriangle(int);
      
      #endif;
      

      好的,所以我认为我的问题是我没有正确地从main调用函数定义。我不确定我是否只是没有包含正确的内容或什么;我真的很感激我能得到的任何帮助。

      以下是我的输出结果;

      1. Square
      2. Left Triangle
      3. Right Triangle
      Select an option: 1
      Filled or hollow? [f/h]f
      Input Size: 4
      1. Square
      2. Left Triangle
      3. Right Triangle
      Select an option:
      

2 个答案:

答案 0 :(得分:2)

你实际上并没有调用这些函数,而是声明它们。

你这样称呼它们:

hollowSquare(size);

答案 1 :(得分:0)

在您的示例中,您没有调用fillSquare函数,但只要具有相同的SIGNATURE和RETURN TYPE,就会再次声明它。在这种情况下,编译器不会抱怨例如:

void foo(); // ok
void foo(); // ok
void foo(); // ok

上面的所有这些原型对编译器都是正确的,只要它们在所有内容中都是相同的,但是你必须提供一个定义,因为它们是相同的函数原型。

void foo(); // ok
     foo(); // error foo differs only in return type which doesn't mean overloading it. this function without return type by default returns int
char foo(); // error foo differs only in return type.

上面的原型是不正确的,因为它们仅在返回类型上有所不同。重载函数签名必须在参数数量或参数类型(至少在一个参数不同)或两者中不同。

void foo();        // ok first prototype with which the compiler compare the following
int  foo(int);     // ok differs in number and type of parameters
     foo(int&)     // ok differs in number and type of parameters
void foo(int, int) // ok differs in number and type of parameters

在你的例子中,只要声明已经声明,你就会重新声明fillSquare。

void filledSquare(int size); // ??!! here you are not calling this function but you are declaring it instead.

调用一个函数只是把函数的名称放在没有返回类型和括号的内部,如果它接受任何BUT,则放置参数永远不会说明参数的类型。

filledSquare(size); // without return type nor type of parameters