首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++Primer 类的使用解决思路

2012-05-04 
C++Primer 类的使用写了个小程序,有两个类,互相都会调用,Message和Floder程序如下:11 class Floder12 cla

C++Primer 类的使用
写了个小程序,有两个类,互相都会调用,Message和Floder
程序如下:

11 class Floder;
 12 class Message;  
 13 
 14 class Message {
 15 private:
 16 string contents;
 17 set<Floder*> floders; 
 18 void put_floder(set<Floder*> &);
 19 void remove_floder(set<Floder *> &);
 20 public:
 21 Message(const string &k):contents(k) {}
 22 Message(const Message &);
 23 Message& operator=(const Message&);
 24 ~Message();
 25 void save(Floder&);
 26 void remove(Floder&);
 27 };


30 void Message::put_floder(set<Floder*> &floder)
 31 {
 32 set<Floder*>::iterator beg;
 33 for(beg = floder.begin(); beg != floder.end(); beg++)  
 34 (*beg)->messages.insert(this);
 35 }
 36 void Message::remove_floder(set<Floder *> &floder)
 37 {
 38 set<Floder*>::iterator beg;
 39 for(beg = floder.begin(); beg != floder.end(); beg++){
 40 (*beg)->messages.erase(this);  
 41 }
 42 }
 43 Message::Message(const Message &src):
 44 contents(src.contents),floders(src.floders)
 45 {
 46 put_floder(floders);
 47 }
 48 
 49 void Message::save(Floder &src)
 50 {
 51 floders.insert(&src);  
 52 src.messages.insert(this);
 53 }
 54 
 55 Message::~Message()
 56 {
 57 remove_floder(floders);
 58 }
 59 
 60 void Message::remove(Floder &src)
 61 {
 62 set<Floder*>::iterator f = floders.find(&src);
 63 if(f != floders.end()){
 64 src.messages.erase(this);
 65 floders.erase(*f);
 66 }
 67 }
 68 
 69 Message& Message::operator=(const Message &src)
 70 {
 71 if(this != &src){
 72 remove_floder(floders);
 73 contents = src.contents;
 74 floders = src.floders;
 75 put_floder(floders);
 76 }
 77 return *this;
 78 }
 79 
80 class Floder {
81 public:
82 set<Message*> messages;
83 };

结果有报错
Message.cpp:34: error: invalid use of incomplete type ‘struct Floder’
Message.cpp:11: error: forward declaration of ‘struct Floder’

貌似我的类定义有问题,求解答.....



[解决办法]
估计是你引用的太多了,或者定义引起了冲突导致了无法识别了。我把你的顺序改变了下就OK啦。

C/C++ code
 class Message;  class Floder { public:      set<Message*> messages; }; class Message { private:     string contents;     set<Floder*> floders;       void put_floder(set<Floder*> &); void remove_floder(set<Floder *> &);     public:    Message(const string &k):contents(k) {}     Message(const Message &);     Message& operator=(const Message&);     ~Message();     void save(Floder&);     void remove(Floder&);     };     void Message::put_floder(set<Floder*> &floder)         {             set<Floder*>::iterator beg;             for(beg = floder.begin(); beg != floder.end(); beg++)                    (*beg)->messages.insert(this);             }     void Message::remove_floder(set<Floder *> &floder)         {             set<Floder*>::iterator beg;             for(beg = floder.begin(); beg != floder.end(); beg++){                 (*beg)->messages.erase(this);                    }             }     Message::Message(const Message &src):     contents(src.contents),floders(src.floders)         {             put_floder(floders);             }               void Message::save(Floder &src)        {             floders.insert(&src);                src.messages.insert(this);             }               Message::~Message()         {             remove_floder(floders);             }               void Message::remove(Floder &src)         {             set<Floder*>::iterator f = floders.find(&src);             if(f != floders.end()){                 src.messages.erase(this);                 floders.erase(*f);            }         }              Message& Message::operator=(const Message &src)        {             if(this != &src){                 remove_floder(floders);                 contents = src.contents;                 floders = src.floders;                put_floder(floders);                 }             return *this;             } 

热点排行