注册 登录
编程论坛 C++教室

求教 c++ primer 第13章的程序的问题

qq826647235 发布于 2017-03-25 16:17, 2074 次点击
求教 c++ primer 第13章的程序的问题

我定义了两个类,一个叫Folder ,一个叫Message。
然后Message类的头文件里包含了Folder头文件。
但是我在message中用folder为什么就是错误   

程序代码:

void Message::save(Folder &a)
{
    a.addMsg(this);
    folder.insert(&a);
}


类外定义,内类声明过了。结果
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
4 回复
#2
wp2319572017-03-25 20:47
大小写咋不一致呢
#3
qq8266472352017-03-25 22:08
回复 2楼 wp231957
额。Folder是一个类,folder是Message的一个成员变量
#4
qq8266472352017-03-25 22:09
完整程序在这里
这是Folder
程序代码:

#ifndef FOLDER_H
#define FOLDER_H

#include<set>
#include"Message.h"

class Folder{
        
public:
    void addMsg(Message *);
    void remMsg(Message *);
private:
    std::set<Message*> message;

};

void Folder::addMsg(Message *a)
{
    message.insert(a);
}

void Folder::remMsg(Message *a)
{
    message.erase(a);
}

#endif


Message.h
程序代码:

#ifndef MESSAGE_H
#define MESSAGE_H

#include<string>
#include<set>
#include"Folder.h"


using std::string;

class Message{
public:
    Message() = default;
    Message(string a) :content(a) { };
    Message(const Message&);
    Message& operator=(const Message&);
    ~Message();
    void swap(Message&, Message&);
    void save(Folder&);
    void remove(Folder&);
    void add_to_folder(const Message&);
    void rem_to_folder();
private:
    string content;
    std::set<Folder*> folder;
   
};

Message::Message(const Message& a)
{
    content = a.content;
    folder = a.folder;
    add_to_folder(a);
}

Message& Message::operator = (const Message& a)
{
    rem_to_folder();
    content = a.content;
    folder = a.folder;
    add_to_folder(a);
    return *this;
}

void Message::add_to_folder(const Message& a)
{
    for (auto use : a.folder)
    {
        use->addMsg(this);
    }
}

void Message::rem_to_folder()
{
    for (auto use : folder)
    {
        use->remMsg(this);
    }
}

Message::~Message()
{
    rem_to_folder();
}

void Message::swap(Message &a, Message &b)
{
    Message mid;

   
}

void Message::save(Folder &a)
{
    a.addMsg(this);
    folder.insert(&a);
}

void Message::remove(Folder &a)
{
    a.remMsg(this);
    folder.erase(&a);
}

#endif


#5
yangfrancis2017-03-26 22:51
第一段代码不会就是Folder.h吧?哪有这样循环包含的道理。
1