我正在使用Turbo C编写以下代码,但出现1个错误和2个警告:
第30行警告:包含while的函数不会在行内展开
第37行错误:预期输入类型名称
第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;
}
您可以忽略这两个警告,它们只是警告。您正在实现要内联的类方法,但是编译器不会内嵌带有while
循环的内联方法,因此它们不会内联在最终的可执行文件中。没关系,内联只是一种优化,方法仍然可以使用。话虽这么说,您根本不需要在此代码中使用任何while
循环。在计算值时,可以通过/
(除法)和%
(模)运算符来使用简单的整数算术。
不过,您的代码确实还有其他问题。
您需要将<iostream.h>
更改为<iostream>
,然后在cin
和cout
前面加上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;
}
好的,我明白了。我在第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)的帮助。