接收错误变量的类型不完整“void”

时间:2013-05-31 00:48:02

标签: c++ variables types void

我正在编写一个基本的C ++程序来计算一条线的长度和斜率。用户输入一组x和y坐标点,然后程序显示一个菜单,询问用户他/她是否只想计算斜率,只计算长度,或者计算斜率和长度。但是,我在我的void菜单功能上收到一个错误,指出该变量的类型为“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;

    }

另外,如果你可以提供一些如何从菜单功能调用斜率和长度计算功能的指导,那就太棒了。

谢谢!

3 个答案:

答案 0 :(得分:2)

首先,您看到错误“不完整类型无效”的原因是因为您有一个分号,它基本上结束了Menu功能的功能定义。用外行人的话说,你还没有完全定义你的功能。

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

  1. 计划包括
  2. 功能原型
  3. 主要功能
  4. 功能定义
  5. 除了在开始功能定义之前需要结束主函数外,您的程序顺序正确。

    所以你应该:

    main()
    {
      ...
    }//End main function
    
    void menu()
    {
      ...
    }
    

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

    而不是使用

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

    声明它就像这样

    int main()
    {
      ...
    }
    

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

    找到一个很好的解释。

    您可以实现此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;
          }
        }
    
    }
    

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

答案 1 :(得分:1)

如果没有其他评论,有三件事可以保持您的示例代码不干净地编译:

  1. 在重新声明“菜单”功能之前,你在主要之后缺少一个右括号'}',有效地试图声明&amp;定义嵌套函数,这是不允许的。
  2. 您并不是要重新声明函数'Menu',而是要定义它:需要删除函数参数列表后的尾部分号。
  3. 您缺少函数Menu的类型规范。它已声明为void Menu(int& MenuItem),但您将其定义为void Menu(MenuItem)。该类型需要出现在定义中。
  4. 干净地编译(但没有经过测试)的代码是:

    #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 (int& 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;
    
    }
    

答案 2 :(得分:0)

您的函数名称末尾有一个分号