编译崩溃 - 在另一个成员函数中使用成员函数

时间:2010-09-25 02:54:18

标签: c++ class

我正在尝试用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。 任何帮助表示赞赏。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

不确定为什么IDE会崩溃。

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

答案 1 :(得分:0)

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