2010-09-25 78 views
0

我正在尝试一个简单的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。 任何帮助表示赞赏。

谢谢!

回答

1

这是因为time_notation返回void。因为它是不完整的类型,所以无法打印空白。

不知道为什么IDE会崩溃。

修复很可能是更改time_notation返回'string'类型。

+0

是的,你们都是对的。感谢您的提醒。我调整了你的方法,看起来像time_notation首先被评估。我更新了代码....输出开始于AM – CppLearner 2010-09-25 03:14:40

+0

实际上,我将得到“a.exe遇到问题并需要关闭(Windows上通常的CMD闭合错误),如果我将time_notation移动到它的我可以看到上午的时间,但是, – CppLearner 2010-09-25 03:22:05

+0

没关系,我看到了问题,因为它是一个字符串,唯一的回报是cout,我复制了cout,我从另一个函数中删除了cout,并且用它作为time_notation(小时)来代替。谢谢! – CppLearner 2010-09-25 03:26:04

0

time_notation返回void。你期望它打印什么?

+0

谢谢你的解决方案! – CppLearner 2010-09-25 03:14:56