我正在尝试一个简单的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;
}
好像time_notation正在执行cout语句之前评估?
* AM *后118分钟,时间将是02:57
解决
我不能再编译它 - 我的IDE会崩溃,之后我加入了time_notation(offset_hour )改为time_ahead()和show_time()(位于两个函数体的最后一行)。
在实现该函数并在其他函数中使用它之前,编译是正确的。该程序运行良好。
这是违法的吗?
我收到了非常长的错误消息
clock-time.cpp:65: error: no match for 'operator<<' in '(+std::operator<< [with _CharT = char, _Traits = std::char_traits](((std::basic_ostream >&)(+std::operator<< [with _Traits = std::char_traits](((std::basic_ostream >&)(+(+std::operator<< [with _CharT = char, _Traits = std::char_traits](((std::basic_ostream >&)(+std::operator<< [with _CharT = char, _Traits = std::char_traits](((std::basic_ostream >&)(+std::operator<< [with _Traits = std::char_traits](((std::basic_ostream >&)(+(+std::operator<< [with _Traits = std::char_traits](((std::basic_ostream >&)(&std::cout)), ((const char*)"After ")))->std::basic_ostream<_CharT, _Traits>::operator<< with _CharT = char, _Traits = std::char_traits)), ((const char*)"minutes, the time will be ")))), std::setfill with _CharT = char))), std::setw(2)))->std::basic_ostream<_CharT, _Traits>::operator<< vClock%3a%3aoffset_hour">with _CharT = char, _Traits = std::char_traits)), ((const char*)":")))), std::setw(2)))->std::basic_ostream<_CharT, _Traits>::operator<< vClock%3a%3aoffset_minute">with _CharT = char, _Traits = std::char_traits << ((vClock*)this)->vClock::time_notation(((vClock*)this)->vClock::offset_hour)'
我使用MinGW的C++编译器,和我的IDE是jGRASP。 任何帮助表示赞赏。
谢谢!
是的,你们都是对的。感谢您的提醒。我调整了你的方法,看起来像time_notation首先被评估。我更新了代码....输出开始于AM – CppLearner 2010-09-25 03:14:40
实际上,我将得到“a.exe遇到问题并需要关闭(Windows上通常的CMD闭合错误),如果我将time_notation移动到它的我可以看到上午的时间,但是, – CppLearner 2010-09-25 03:22:05
没关系,我看到了问题,因为它是一个字符串,唯一的回报是cout,我复制了cout,我从另一个函数中删除了cout,并且用它作为time_notation(小时)来代替。谢谢! – CppLearner 2010-09-25 03:26:04