Turbo C编写C++代码遇‘Type name expected’错误及警告的解决方法
问题修复方案
咱们逐个解决你遇到的问题:
1. 第37行错误:Type name expected
min是C里的标准关键字(对应标准库的最小值函数/模板),Borland Turbo C会把它识别为关键字,所以不能用来当类名。你得把类名改成非关键字的名称,比如Minute就很合适。
2. 第30行和第48行警告:包含while的函数无法内联展开
Turbo C++默认会把类内直接定义的成员函数当作inline(内联)函数处理,但内联函数不适合包含while这类循环逻辑——编译器没法高效展开带循环的函数,于是抛出警告。
解决办法很简单:把包含while循环的成员函数移到类外面定义,这样编译器就不会尝试内联它们,警告自然就消失了。
额外逻辑错误修复
你的convert函数里有个死循环问题,得一起改掉:
原来的循环只累加分钟数,但没减少秒数,导致sec永远满足>=60的条件,循环停不下来。必须在循环里给sec减去60:
while (sec >= 60) { mini += 1; sec -= 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; } }; // 类名从min改为Minute,避免关键字冲突 class Minute : public second { protected: int mini; public: Minute() { mini = 0; } // 仅在类内声明函数,类外实现 void convert(); }; class hour : public Minute { protected: int hr; public: hour() { hr = 0; } // 仅在类内声明函数,类外实现 void convert1(); }; // 类外定义convert函数,规避内联警告 void Minute::convert() { getsec(); while (sec >= 60) { mini += 1; sec -= 60; // 修复死循环问题 } } // 类外定义convert1函数,规避内联警告 void hour::convert1() { convert(); while (mini >= 60) { mini -= 60; hr += 1; } cout << "hr:" << hr << "\t mini:" << mini << "\t sec:" << sec; } int main() { clrscr(); hour h; h.convert1(); getch(); return 0; }
内容的提问来源于stack exchange,提问作者Me Shaikh
相关产品推荐
相关产品推荐

