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

'undefine reference to'请问

2012-11-06 
undefine reference to请教C/C++ code//Client.cpp#include iostream#include string#include Mess

'undefine reference to'请教

C/C++ code
//Client.cpp#include <iostream>#include <string>#include "Message.h"#include "Folder.h"using std::string;using std::cin;using std::cout;using std::endl;int main() {    cout << "Input a line of character to test:" << std::flush;    string line;    getline(cin,line);    Message message(line);    Folder Fol;    message.save(Fol);    message.remove(Fol);    return 0;}


C/C++ code
//Message.h#ifndef _MESSAGE_H#define _MESSAGE_H#include <string>#include <set>#include "Folder.h"#define _FOLDER_Hclass Folder;class Message {    public:        Message(std::string line):            Message_str(line) { };        Message(Message&);        ~Message();        Message& operator=(Message&);        void save(Folder&);        void remove(Folder&);    private:        std::set<Folder*> Folders;        std::string Message_str;        void Put_Msg_In_Folder(const std::set<Folder*>);        void Rem_Mes_From_Folder();};#endif=(Message& Mes)  {    Message_str = Mes.Message_str;    Folders(Mes.Folders);    Put_Mes_In_Folder(Folders);}void Message::save(Folder& folder)  {    Folder* pfol = &folder;    Folders.insert(pfol);}void Message::remove(Folder& folder) {    Folder* pfol = &folder;    for(std::set<Folder*>::iterator it = Folders.begin();        it != Folders.end();++it) {        if(*pfol == **it)            Folders.erase(*it);    }}void Message::Put_Mes_In_Folder(std::set<Folder*> Folders) {    for(std::set<Folder*>::iterator it = Folders.begin();            it != Folders.end();++it) {        (*it) -> addmes(this);    }}void Message::Rem_Mes_From_Folder(std::set<Folder*> Folders) {    for(std::set<Folder*>::iterator it = Folders.begin();        it != Folders.end();++it) {        (*it) -> remmes(this);    }}


C/C++ code
//Folder.h#ifndef _FOLDER_H#define _FOLDER_H#include <string>#include <set>#include "Message.h"#define _MESSAGE_Hclass Message;class Folder {    public:        void addmes(Message*);        void remmes(Message*);    private:        std::set<Message*> Messages;};#endif


C/C++ code
//Folder.cpp#include <set>#include <string>#include "Folder.h"void Folder::addmes(Message* Message) {    Messages.insert(Message);}void Folder::remmes(Message* Message) {    Messages.erase(Message);}

Client.cpp:(.text+0x98): undefined reference to `Message::save(Folder&)'
Client.cpp:(.text+0xae): undefined reference to `Message::remove(Folder&)'
Client.cpp:(.text+0xce): undefined reference to `Message::~Message()'
Client.cpp:(.text+0xfe): undefined reference to `Message::~Message()'
Client.cpp:(.text+0x123): undefined reference to `Message::~Message()'
collect2: error: ld returned 1 exit status
系统:Linux 编译器:g++
以前高中没什么时间学,今年上了大学才终于可以自己分配时间。所以这些问题不太懂。请多多指教了。

[解决办法]
makefile文件里,有没有加入Message.cpp
或者直接用g++:
g++ -o Client Client.cpp Folder.cpp Message.cpp
[解决办法]
Message.h包含了Folder.h, 而Folder.h又包含了Message.h

你在Folder.h中声明了class Message; 用的又是指针还包含它干什么了,删了它。

热点排行