C难以理解的编译错误
发布时间:2020-12-16 09:43:42 所属栏目:百科 来源:网络整理
导读:我有一个非常简单的任务要做.写一个定义时间的类.出于某种原因,在其中一个函数中我得到一个错误,我不明白. 我搜索了一个没有成功的解决方案,所以最后我决定将它发布在这里. time.h中 class time{private: int _hours; int _minutes; float _seconds; bool ch
我有一个非常简单的任务要做.写一个定义时间的类.出于某种原因,在其中一个函数中我得到一个错误,我不明白.
我搜索了一个没有成功的解决方案,所以最后我决定将它发布在这里. time.h中 class time { private: int _hours; int _minutes; float _seconds; bool checkHours(int hours); bool checkMinutes(int minutes); bool checkSeconds(float seconds); public: time(int hours=0,int minutes=0,float seconds=0); time(const time & tm); ~time(); void hours(int hours); int hours() const; void minutes(int minutes); int minutes() const; void seconds(float seconds); float seconds() const; void operator=(time tm); bool operator==(time tm); void print(); time getTimeFromUser(); float getTimeAsFractionOfTheDay(time tm); }; 和time.cpp #include <iostream> #include "time.h" bool time::checkHours(int hours) { return hours>=0 && hours<24; } bool time::checkMinutes(int MS) { return MS>=0 && MS<60; } bool time::checkSeconds(float MS) { return MS>=0 && MS<60; } //constractors time::time(int hours,int minutes,float seconds) { if(checkHours(hours) && checkMinutes(minutes) && checkSeconds(seconds)) { _hours=hours; _minutes=minutes; _seconds=seconds; } else { cout<<"Error"<<endl; _hours=-1; _minutes=-1; _seconds=-1; } } time::time(const time & tm) { _seconds = tm.seconds(); _hours = tm.hours(); _minutes=tm.minutes(); } time::~time() { } //get-set functions void time::hours(int hours) { _hours=hours; } int time::hours() const { return _hours; } void time::minutes(int minutes) { _minutes=minutes; } int time::minutes() const { return _minutes; } void time::seconds(float seconds) { _seconds = seconds; } float time::seconds() const { return _seconds; } //operators void time::operator=(time tm) { _hours=tm.hours(); _minutes=tm.minutes(); _seconds=tm.seconds(); } bool time::operator==(time tm) { return _hours=tm.hours() && _minutes==tm.minutes() && _seconds==tm.seconds(); } //some function void time::print() { cout<<" "<<_hours<<":"<<_minutes<<":"<<_seconds<<" "<<endl; } time time::getTimeFromUser() { time newTime; int userhours=-1; int userminutes=-1; float userseconds=-1; while (!checkHours(userhours)) { cout<<"enter hours"<<endl; cin>>userhours; if(!checkHours(userhours)) { cout<<"Error try again"<<endl; } } while (!checkMinutes(userminutes)) { cout<<"enter minutes"<<endl; cin>>userminutes; if(!checkMinutes(userminutes)) { cout<<"Error try again"<<endl; } } while (!checkSeconds(userseconds)) { cout<<"enter Seconds"<<endl; cin>>userseconds; if(!checkSeconds(userseconds)) { cout<<"Error try again"<<endl; } } newTime.seconds(userseconds); newTime.hours(userhours); newTime.minutes(userminutes); return newTime; } float time::getTimeAsFractionOfTheDay(time tm) { return 0.0; } 我得到了那些错误 我不明白我做错了什么.我认为这是愚蠢的,但我找不到它. 解决方法
事实证明,你是一个微妙的bug的受害者.
time是在系统头time.h中声明的函数,它通过iostream包含在程序中.当你声明time time :: getTimeFromUser()时,编译器会看到返回值并认为你的意思是函数时间! clang用它的错误使这个显而易见: time.cpp:122:1: error: must use 'class' tag to refer to type 'time' in this scope time time::getTimeFromUser() ^ class /usr/include/time.h:133:8: note: class 'time' is hidden by a non-type declaration of 'time' here time_t time(time_t *); ^ 修复是定义这样的特定函数: class time time::getTimeFromUser() { ... } 或者,如果使用C 11, auto time::getTimeFromUser() -> time { ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |