'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; 用的又是指针还包含它干什么了,删了它。