读书人

帮忙找上bug C++ STL小程序

发布时间: 2012-08-08 14:32:45 作者: rapoo

帮忙找下bug C++ STL小程序
test.h

#ifndef _TEST_H
#define _TEST_H
#pragma warning (disable: 4786)

#include <string>
#include <set>

class Folder;


class Message
{
std::string content;
std::set<Folder*> sfp;

public:
Message(std::string s);
Message(const Message &);
Message& operator=(const Message &);
~Message();
void save(Folder*);
void remove(Folder*);
void put_Msg_in_Folders(const std::set<Folder*>&);
// remove this Message from every Folder in folders
void remove_Msg_from_Folders();



};


class Folder
{
std::set<Message *> smp;
};



#endif




test.cpp

#include "test.h"

#include <algorithm>
#include <numeric>


using namespace std;

Message::Message(string s=" "):content(s){}
void Message::save(Folder * foldp)
{
sfp.insert(foldp);
}

Message::Message(const Message & msg)
{
content=msg.content;
sfp(msg.sfp.begin(),--msg.sfp.end());

//必须给指向源 Message 的每个 Folder 增加一个指向该 Message 的指针;
}


Message& Message::operator=(const Message & msg)
{
if (this==&msg)
return *this;

sfp.clear();

content=msg.content;
sfp(msg.sfp.begin(),--msg.sfp.end());

return *this;
}

void Message::remove(Folder *foldp)
{
sfp.erase(foldp);
}

Message::~Message()
{

//撤销一个 Message 对象时,必须更新指向该 Message 的每个 Folder。一旦去掉了 Message,指向该 Message 的指针将失效,
//所以必须从该 Message 的 Folder 指针集的每个 Folder 中删除这个指针。
}


void Message::put_Msg_in_Folders(const std::set<Folder*>&)
{

}
// remove this Message from every Folder in folders
void Message::remove_Msg_from_Folders()
{

}




main.cpp



#include <iostream>


using namespace std;

int main()
{
return 0;
}


编译时候报错::\test\0725\test.cpp(18) : error C2064: term does not evaluate to a function
E:\test\0725\test.cpp(32) : error C2064: term does not evaluate to a function


是错在sfp(msg.sfp.begin(),--msg.sfp.end()); 也就是set类型数据sfp拷贝出错,但是我看书上说set支持该形式的
拷贝啊,为什么,求解释 sfp(msg.sfp); 这样改报同样的错误



我看C++ primer是这样子写的啊



[解决办法]

C/C++ code
Message::Message(const Message & msg){    content=msg.content;    sfp = msg.sfp;    //    此处改了下,但和你的逻辑不一样了        //必须给指向源 Message 的每个 Folder 增加一个指向该 Message 的指针;}Message& Message::operator=(const Message & msg){    if (this==&msg)        return *this;        sfp.clear();        content=msg.content;    sfp = msg.sfp;    //    此处改了下,但和你的逻辑不一样了        return *this;} 

读书人网 >C++

热点推荐