2010-09-25 43 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