我正在嘗試一個簡單的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