我正在尝试用C ++编写一个简单的时间显示程序。
被修改
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <string>
using namespace std;
class vClock
{
public:
// constructor
vClock(int = 0, int = 0);
// mutable member functions
void set_time(int, int);
void time_ahead(int);
// constant function
string time_notation(int) const;
void show_time() const;
private:
int hour;
int minute;
int offset_hour;
int offset_minute;
int maxhour;
int maxminute;
int carrier;
};
// member function implementation
vClock::vClock(int hr, int min)
{
hour = hr;
minute = min;
maxhour = 24;
maxminute = 60;
carrier = 0;
}
void vClock::set_time(int hr, int min)
{
hour = hr;
minute = min;
}
void vClock::time_ahead(int add_minute)
{
// suppose to be a short cut for all cases
carrier = ((add_minute + minute) / maxminute);
offset_hour = hour + carrier;
offset_minute = (add_minute + minute) - (carrier * maxminute);
cout << "After " << add_minute << "minutes, the time will be "
<< setfill('0') << setw(2) << offset_hour << ":" << setw(2) << offset_minute << time_notation(offset_hour)<< endl;
return;
}
string vClock::time_notation(int hr) const
{
if(hour < 12)
cout << "AM";
if (hour >= 12)
cout << "PM";
}
void vClock::show_time() const{
cout << setfill('0')
<< setw(2) << hour << ':'
<< setw(2) << minute
<< time_notation(hour) << endl;
return;
}
// member functions implementation END
int main()
{
vClock sample;
sample.set_time(0,59);
// sample.show_time();
sample.time_ahead(118);
return EXIT_SUCCESS;
}
似乎在cout语句之前正在评估time_notation吗?
* AM * 118分钟后,时间将是02:57
解决
我无法再编译它 - 在我将 time_notation(offset_hour)添加到time_ahead()和show_time()(位于两个函数体的最后一行)之后,我的IDE将崩溃。
在实现该功能并在其他功能中使用之前,编译是正确的。该计划运作良好。
这是非法的吗?
我收到了很长的错误消息
clock-time.cpp:65:错误:不匹配'operator&lt;&lt;' in'(+ std :: operator&lt;&lt; [with _CharT = char,_Traits = std :: char_traits]((std :: basic_ostream&gt;&amp;)(+ std :: operator&lt;&lt; [with _Traits = std :: char_traits](((std :: basic_ostream&gt;&amp;)(+(+ std :: operator&lt;&lt; [with _CharT = char,_Traits = std :: char_traits]((std :: basic_ostream&gt;&amp; ;)(+ std :: operator&lt;&lt; [with _CharT = char,_Traits = std :: char_traits]((std :: basic_ostream&gt;&amp;)(+ std :: operator&lt;&lt; [with _Traits = std :: char_traits](((std :: basic_ostream&gt;&amp;)(+(+ std :: operator&lt;&lt; [with _Traits = std :: char_traits]((std :: basic_ostream&gt;&amp;)(&amp;) ;(std :: cout)),((const char *)“After”))) - &gt; std :: basic_ostream&lt; _CharT,_Traits&gt; :: operator&lt;&lt; with _CharT = char,_ Traits = std :: char_traits) ),((const char *)“分钟,时间将是”)))),std :: setfill with _CharT = char))),std :: setw(2))) - &gt; std :: basic_ostream&lt; _CharT,_Traits&gt; :: operator&lt;&lt; vClock%3a%3aoffset_hour“&gt; with _CharT = char,_ Traits = std :: char_traits)),((const char * )“:”)))),std :: setw(2))) - &gt; std :: basic_ostream&lt; _CharT,_Traits&gt; :: operator&lt;&lt; vClock%3a%3aoffset_minute“&gt; _CharT = char,_Traits = std :: char_traits &lt;((vClock *)this) - &gt; vClock :: time_notation(((vClock *)this) - &gt ; VCLOCK :: offset_hour)'
我使用的是MinGW C ++编译器,我的IDE是jGRASP。 任何帮助表示赞赏。
谢谢!
答案 0 :(得分:1)
那是因为time_notation
返回void。无法打印空白,因为它是不完整的类型。
不确定为什么IDE会崩溃。
修复可能是将time_notation
更改为返回'string'
类型。
答案 1 :(得分:0)
time_notation
返回void
。你期望它打印什么?