在写包含这两个类的头文件时,有一个问题值得注意。
我是先写Message类后写Folder类的,而这两个类又需要操作对方的成员,因此要定义为友元类。而且,在定义Message类前一定要有Folder类的前向声明,Message有用到Folder类对象的函数都需定义在Folder类后,否则无法编译通过(未定义当然是无法使用的)。因此我所写的头文件的结构为: Folder类前向声明 - Message类的定义 - Folder类的定义 - Message各函数的定义 - Folder类各函数的定义
#ifndef MESSAGEFOLDER
#define MESSAGEFOLDER
#include<iostream>
#include<string>
#include<set>
class Folder; //前向声明
class Message
{
friend class Folder; //友元类
friend void print(const Message&);
friend void swap(Message&, Message&);
public:
explicit Message(const std::string &str = "") :contents(str) {}
Message(const Message&);
Message& operator=(const Message&);
~Message();
void save(Folder&); //保存到某目录下
void remove(Folder&); //从某目录下删除
void addFolder(Folder&);
void remFolder(Folder&);
private:
std::string contents