'undefine reference to'请教

AppleStarain 2012-10-16 04:02:15

//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;
}



//Message.h

#ifndef _MESSAGE_H
#define _MESSAGE_H

#include <string>
#include <set>
#include "Folder.h"
#define _FOLDER_H
class 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.cpp
#include <string>
#include <set>
#include "Message.h"

Message::Message(Message& Mes):
Message_str(Mes.Message_str) Folders(Mes.Folders) {
Put_Mes_In_Folder(Folders);
}

Message::~Message() {
Rem_Mes_From_Folder(Folders)
}

Message& Message::operator=(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);
}
}




//Folder.h

#ifndef _FOLDER_H
#define _FOLDER_H

#include <string>
#include <set>
#include "Message.h"
#define _MESSAGE_H

class Message;
class Folder {
public:
void addmes(Message*);
void remmes(Message*);

private:
std::set<Message*> Messages;
};

#endif




//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++
以前高中没什么时间学,今年上了大学才终于可以自己分配时间。所以这些问题不太懂。请多多指教了。
...全文
356 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AppleStarain 2012-10-16
  • 打赏
  • 举报
回复
多谢3L啊。。我还没从编译器用法这方面考虑过呢。。:-)
AppleStarain 2012-10-16
  • 打赏
  • 举报
回复
恩。我在学习C++ Primer我现在在想后面的高级部分我现在需不需要看。。还是以后需要了再看,谢谢各位了
xyddz 2012-10-16
  • 打赏
  • 举报
回复
楼主这个代码好像是C++ Primer(第4版)的吧。
xyddz 2012-10-16
  • 打赏
  • 举报
回复
Message.h包含了Folder.h, 而Folder.h又包含了Message.h

你在Folder.h中声明了class Message; 用的又是指针还包含它干什么了,删了它。
ouyh12345 2012-10-16
  • 打赏
  • 举报
回复
makefile文件里,有没有加入Message.cpp
或者直接用g++:
g++ -o Client Client.cpp Folder.cpp Message.cpp
AppleStarain 2012-10-16
  • 打赏
  • 举报
回复
我找了好久。。。我在类的实现里嫁了#include "XXX.h"了,那.cpp和 .h之间应该建立联系了才对啊。。但是好像没有
proorck6 2012-10-16
  • 打赏
  • 举报
回复
编译器找不到相应的符号,可以看看是不是#include给忽略了。
这应该是个结构问题,仔细看看文件间的包含、调用关系。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧