我正在编写一个基本的C++程序来计算一条线的长度和斜率。用户输入一组x和y坐标点,然后程序显示菜单,询问用户他/她是否只想计算斜率,只计算长度,还是只计算斜率和长度。但是,我的void Menu函数出现错误,指出该变量具有不完整的类型“void”。我现在的代码如下。

#include <iostream>
#include <cmath>

void Menu (int& MenuNum);
void CalculateSlope (int& X1, int& X2, int& Y1, int& Y2);
void CalculateLength (int& X1, int& X2, int& Y1, int& Y2);

using namespace std;

int main(int argc, const char * argv[])
{

    int X1;
    int X2;
    int Y1;
    int Y2;
    int MenuNum;
    //Ask User for Points

    cout << "Enter points (X1,Y1) and (X2,Y2) for the line." << endl;
    cout << " " << endl;
    cout << "X1:" << endl;
    cin >> X1;
    cout << "Y1:" << endl;
    cin >> Y1;
    cout << "X2:" << endl;
    cin >> X2;
    cout << "Y2:" << endl;
    cin >> Y2;

    cout << "Points entered are"
         << " : " << X1 << ","
         << Y1 << " and "
         << X2 << "," << Y2 << endl;
    cout << "                  "<< endl;

    //Menu

    void Menu (MenuNum);
    {
        cout << "To calculate the slope of the line, enter 1 " << endl;
        cout << "To calculate the length of the line, enter 2" << endl;
        cout << "To calculate the length and slope of the line, enter 3" << endl;
        cin >> MenuNum;

    }

另外,如果您可以从“菜单”功能中获得有关如何调用斜率和长度计算功能的指导,那将是很好的。

谢谢!

最佳答案

首先,您看到错误“不完整的类型无效”的原因是因为您使用的分号实际上结束了Menu函数的函数定义。用外行的话来说,您还没有完全完成对功能的定义。

其次,按照惯例,您编写的简单C++程序应遵循以下代码布局。

  • 程序包括
  • 函数原型(prototype)
  • 主要功能
  • 函数定义

  • 您具有正确的程序顺序,只是需要在开始函数定义之前结束主要功能。

    因此,您应该具有:
    main()
    {
      ...
    }//End main function
    
    void menu()
    {
      ...
    }
    

    我注意到的另一件事是,如果要从命令行获取输入,通常会使用赋予主函数的参数。由于您要在程序中请求用户输入,因此应更改声明主函数的方式。

    而不是使用
    int main(int argc, const char * argv[])
    {
      ...
    }
    

    这样声明
    int main()
    {
      ...
    }
    

    在我回答您的最后一个问题之前,您需要构建功能来处理用户的输入。这可以通过switch case语句来完成。如果您需要有关在C++中使用switch case语句的信息,可以在http://www.cplusplus.com/doc/tutorial/control/中找到很好的解释。

    实现该switch语句的一种方法是放置对函数的调用,以计算switch情况下的线的斜率和长度。如果您这样做,则需要更改菜单功能参数的一件事。您还需要将坐标值传递给菜单功能。例如,
    void Menu (MenuNum, X1, X2, Y1, Y2)
    {
        cout << "To calculate the slope of the line, enter 1 " << endl;
        cout << "To calculate the length of the line, enter 2" << endl;
        cout << "To calculate the length and slope of the line, enter 3" << endl;
        cin >> MenuNum;
    
        switch(MenuNume)
        {
          case 1:
          {
            //call calculate slope function
            break;
          }
          case 2:
          {
            //call calculate length function
            break;
          }
          case 3:
          {
            //call both calculate slope and calculate length functions
            break;
          }
          default:
          {
             cout << "Please enter a correct value." << endl;
          }
        }
    
    }
    

    我认为这回答了您所有的问题。希望这可以帮助!

    关于c++ - 接收错误变量的类型 "void"不完整,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16848150/

    10-09 03:45