Answer

问题及解答

问题主要在 第二个类Mailbox中 然后在测试时 无法输出

Posted by 120702117 on 2014-04-06 22:30:39 last update 2014-04-06 22:30:39 | Edit | Answers (1)

主要问题 在程序中都有所标记

 

 

#include<iostream>
#include<ctime>
#include<string>
#include<vector>
using namespace std;

//这个类没有问题

 class Message
 {
     public:
        Message();
        void append();
        string to_string()const;
        void print() const;
    private:
        string name1,name2;
        string article;
        time_t now_time;
 };

 Message::Message()
 {
     cout<<"Please enter the recipient\'s name:"<<endl;
     getline(cin,name1);
     cout<<"Please enter the addresser\'s name:"<<endl;
     getline(cin,name2);
     now_time=time(NULL);
     append();
 }
void Message::append()
 {
     string add_string;
     cout<<"Please enter the add message"<<endl;
     getline(cin,add_string);
     article=article+add_string;
 }
 string Message::to_string()const
 {
     return "**********\nFrom:"+name2+"\nTo:"+name1+"\n"+article;
 }
 void Message::print()const
 {
    cout<<to_string()<<endl;
    cout<<ctime(&now_time)<<"**********" <<endl;
 }


 class Mailbox
 {
     public:
     Mailbox();

    //问题应该在这几个成员函数中
     void add_message(Message mes){MAIL.push_back(mes);}
     void remove_message(int i);
     Message get_message(int i);
     private:
     vector<Message>MAIL;

 };
 void Mailbox::remove_message(int i)//删掉MAIL中的第i个元素
 {
     vector<Message>::iterator pos;
     pos=MAIL.begin();
     MAIL.erase(pos+i);
 }
 Message Mailbox:: get_message(int i)//得到MAIL中的第i个元素
 {
     return MAIL[i];
 }


 int main()
 {
     Message mes1;
     Message mes2;
     Message mes3;
     Mailbox mail;
     mail.add_message(mes1);
     mail.add_message(mes2);
     mail.add_message(mes3);

     mail.remove_message(1);
    Message m1,m2;
    //下面这几句 怎么改  都老是 出错- -。也可能是上面函数体出错  求老师指教
    m1=mail.get_message(0);
    m2=mail.get_message(1);
     cout<<m1.print()<<endl;
     cout<<m2.print()<<endl;
     return 0;
 }

1

Posted by haifeng on 2014-04-10 16:33:51

倒数第3、4行应去掉 cout<< <<endl; 因为 Message::print() 函数中已经执行输出了.

void Mailbox::remove_message(int i)//删掉MAIL中的第i个元素

这个函数应该首先对参数 i 进行检查, 比如不能小于零, 不能大于其 size()-1.

Mailbox 类中构造函数  Mailbox() 没有定义.  将 Mailbox(); 改为 Mailbox(){};