帮忙找下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;}