为什么我的C ++代码中出现错误“期望输入类型名称”错误?

问题描述 投票:-3回答:2

我正在使用Turbo C编写以下代码,但出现1个错误和2个警告:

  1. 第30行警告:包含while的函数不会在行内展开

  2. 第37行错误:预期输入类型名称

  3. 第48行警告:包含while的函数未在行内展开

请帮助我解决这些问题。我猜编译器是Borland。

#include <iostream.h>
#include <conio.h>

class second
{
protected:
    int sec;

public:
    second()
    {
        sec = 0;
    }

    void getsec()
    {
        cout << "\n enter the second time:"; 
        cin >> sec;
    }
};

class min : public second
{
protected:
    int mini;

public:
    min()
    {
        mini = 0;
    }

    void convert()
    {
        getsec();
        while (sec >= 60)
        {
            mini = mini + 1;
        }
    }
};

class hour : public min
{
protected:
    int hr;

public:
    hour()
    {
        hr = 0;
    }

    void convert1()
    {
        convert();
        while (mini >= 60)
        {
            mini = mini - 60;
            hr = hr + 1;
        }
        cout << "hr:" << hr << "\t mini" << mini << "\t sec" << sec;
    }
};

int main()
{
    clrscr();
    hour h;
    h.convert1();
    getch();
    return 0;
}
c++ turbo-c++
2个回答
0
投票

您可以忽略这两个警告,它们只是警告。您正在实现要内联的类方法,但是编译器不会内嵌带有while循环的内联方法,因此它们不会内联在最终的可执行文件中。没关系,内联只是一种优化,方法仍然可以使用。话虽这么说,您根本不需要在此代码中使用任何while循环。在计算值时,可以通过/(除法)和%(模)运算符来使用简单的整数算术。

不过,您的代码确实还有其他问题。

您需要将<iostream.h>更改为<iostream>,然后在cincout前面加上std::

<conio.h>是非标准头,您应该完全避免使用它。没有clrscr()的标准C ++替代品,您将不得不诉诸特定于平台的API(请参阅Windows的Clearing the Screen),但是可以使用std::cin.get()替代getch()

[min::convert()被卡在用户的无穷循环中,用户输入的值> =60。您没有像在sec中那样在每次循环迭代中递减hour::convert1()

min宏和min()算法已经在C运行时库和C ++标准库中使用了标识符std::min(),因此应将min类重命名为更唯一的名称。

尝试以下方法:

#include <iostream>
#include <limits>
#include <cstdlib>

class seconds
{
protected:
    int secs;

public:
    seconds()
    {
        secs = 0;
    }

    void getsecs()
    {
        std::cout << "\n enter the time in seconds:"; 
        std::cin >> secs;
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
};

class minutes : public seconds
{
protected:
    int mins;

public:
    minutes()
    {
        mins = 0;
    }

    void convert()
    {
        getsecs();
        mins = secs / 60;
        secs %= 60;
    }
};

class hours : public minutes
{
protected:
    int hrs;

public:
    hours()
    {
        hrs = 0;
    }

    void convert1()
    {
        convert();
        hrs = mins / 60;
        mins %= 60;
    }

    void show()
    {
        std::cout << "hrs:" << hrs << "\t mins" << mins << "\t secs" << secs;
    } 
};

int main()
{
    std::system("clr");

    hours h;
    h.convert1();
    h.show();

    std::cin.get();
    return 0;
}

0
投票

好的,我明白了。我在第38行中错误地键入了'public main'而不是'public min'。我也删除了while语句中的1并对其进行了一些修改,因为该代码在60秒以上的输入中没有显示输出。这是工作的经过修改的(某种程度上)代码。

#include <iostream.h>
#include <conio.h>

class second
{
protected:
    int sec;

public:
    second()
    {
        sec = 0;
    }

    void getsec()
    {
        cout << "\n enter the second time:"; 
        cin >> sec;
    }
};

class min : public second
{
protected:
    int mini;

public:
    min()
    {
        mini = 0;
    }

    void convert()
    {
        getsec();
        mini = sec / 60;
        sec %= 60;
    }
};

class hour : public min
{
protected:
    int hr;

public:
    hour()
    {
        hr = 0;
    }

    void convert1()
    {
        convert();
        while (mini >= 60)
        {
            mini = mini - 60;
            hr = hr + 1;
        }
        cout << "hr:" << hr << "\t mini" << mini << "\t sec" << sec;
    }
};

int main()
{
    clrscr();
    hour h;
    h.convert1();
    getch();
    return 0;
}

感谢所有人(尤其是@Remy Lebeau)的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.