【问题标题】:Functions Arrangement in C++C++中的函数排列
【发布时间】:2015-11-23 09:37:27
【问题描述】:

我刚开始使用 C++,但在安排功能时遇到了一些问题。

我在使用Unity(C#)的时候,是先写Start函数,然后根据调用的时间再写其他函数。

但是在这里,在 C++ 中,它看起来反之亦然!

例如,我在LearnCPP.com上学习时编写了这个简单的程序

#include <iostream>


void Add(int No1, int No2)
{
    std::cout << No1 + No2 << std::endl;
}

void Subtract(int No1, int No2)
{
    std::cout << No1 - No2 << std::endl;
}

void GetNumbers(int Operation)
{
    int No1;
    int No2;

    std::cout << "The first no. : ";
    std::cin >> No1;
    std::cout << "The second no. : ";
    std::cin >> No2;

    if (Operation == 1)
    {
        Add(No1, No2);
    }
    else if (Operation == 2)
    {
        Subtract(No1, No2);
    }
}

int main ()
{
    while (true)
    {
        int Operation;
        int TryAgain;

        std::cout << "Enter 1 for an Addition Operation. Enter 2 for a Subtraction Operation." << std::endl;
        std::cin >> Operation;

        GetNumbers(Operation);

        std::cout << "Enter 1 to try again. Enter 2 to exit.";
        std::cin >> TryAgain;

        if (TryAgain == 1)
        {

        }
        else if (TryAgain == 2)
        {
            break;
        }
    }

    return 0;
}

如果我打算用 C# 编写它,我会先编写 main(Start)函数,然后是 GetNumbers,然后是 Add 和 Subtract 函数。

如果我以这种方式用 C++ 编写它,我会得到错误(我使用的是 Visual Studio 2013 社区版)。

有什么办法可以做到吗?

提前致谢

【问题讨论】:

  • 你遇到了什么错误?
  • 你可以forward declare函数然后在main函数之后定义它们的主体
  • @twentylemon 虽然知道一个人收到的错误通常很有帮助,但这是一种罕见的情况,问题是如此简单,以至于查看代码应该很容易向您展示问题(作为新的-to-C++ 程序员,OP 只是不熟悉)。
  • @mah 一切都在使用前声明...
  • @twentylem 是的,当他改变这个时,他得到了错误。他发布的代码是一个工作示例。重新阅读问题。

标签: c# c++ visual-studio function visual-c++


【解决方案1】:

您至少应该前向声明函数,并且可能使用包含前向声明的 .hpp 文件。

【讨论】:

    【解决方案2】:

    函数必须在使用前声明,但您可以稍后定义:

    int add (int a, int b);
    
    int main () {
        return add(1,2);
    }
    
    int add (int a, int b) {
        return a + b;
    }
    

    【讨论】:

      【解决方案3】:

      这是因为 C++ 需要一个函数头来知道函数在调用之前使用的参数,所以你要么必须在 main 中调用它们之前定义它们,要么像这样声明函数原型:

      #include <iostream>
      
      
      //function prototypes
      void Add(int No1, int No2);
      void Subtract(int No1, int No2);
      void GetNumbers(int Operation);
      
      int main ()
      {
          while (true)
          {
              int Operation;
              int TryAgain;
      
              std::cout << "Enter 1 for an Addition Operation. Enter 2 for a Subtraction Operation." << std::endl;
              std::cin >> Operation;
      
              GetNumbers(Operation);
      
              std::cout << "Enter 1 to try again. Enter 2 to exit.";
              std::cin >> TryAgain;
      
              if (TryAgain == 1)
              {
      
              }
              else if (TryAgain == 2)
              {
                  break;
              }
          }
      
          return 0;
      }
      
      void Add(int No1, int No2)
      {
          std::cout << No1 + No2 << std::endl;
      }
      
      void Subtract(int No1, int No2)
      {
          std::cout << No1 - No2 << std::endl;
      }
      
      void GetNumbers(int Operation)
      {
          int No1;
          int No2;
      
          std::cout << "The first no. : ";
          std::cin >> No1;
          std::cout << "The second no. : ";
          std::cin >> No2;
      
          if (Operation == 1)
          {
              Add(No1, No2);
          }
          else if (Operation == 2)
          {
              Subtract(No1, No2);
          }
      }
      

      【讨论】:

      • 非常感谢您的回答
      • @AdhamT 如果回答了您的问题,请接受带有绿色 V 的回答。
      【解决方案4】:

      在 C++ 中,我们主要使用作用域,也就是说,只要变量或函数没有被声明为 extern 或之前声明(头文件等),编译器就无法判断。

      【讨论】:

      • 我认为这个答案让目标受众有点困惑。也许您可以对其进行一些扩展并连接它与问题的关系。
      • 非常感谢您的回答
      • 您可以创建一个宏并将其插入到 cpp 文件的末尾,进行输出,然后您将知道是否已从编译器读取了一个类。 headers 开头的前向声明,包含在 cpp 文件的开头。这应该会有所帮助。
      【解决方案5】:

      在这种特殊情况下,如果您将苹果与苹果进行比较,C++ 就像 C# 一样工作。类似于 C# 的示例将包含一个具有一些成员的类,您可以按任何顺序定义和调用这些成员:

      class CMyClass
      {
          void Start()
          {
              GetNumbers(1);
          }
          void GetNumbers(int Operation) 
          {
              Add(2, 3);
              Subtract(4, 5);
          }
          void Add(int No1, int No2) {}
          void Subtract(int No1, int No2) {}
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-10
        相关资源
        最近更新 更多