对现有类的未定义引用
Posted
技术标签:
【中文标题】对现有类的未定义引用【英文标题】:undefined reference to existing class 【发布时间】:2012-02-02 02:48:25 【问题描述】:#ifndef MIGRATINGUSER_H
#define MIGRATINGUSER_H
#include <iostream>
using namespace std;
class MigratingUser
public:
void populateUidAndGuid(string line);
private:
string uid;
string guid;
;
#endif
这是头定义,下面是cpp定义:
#include "MigratingUser.h"
using namespace std;
void MigratingUser::populateUidAndGuid(string line)
//get the uid and guid
这是我得到的错误。我该如何解决这个问题:
undefined reference to MigratingUser::populateUidAndGuid(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
为了完整起见,这是我使用课程的方式:
MigratingUser muser;
muser.populateUidAndGuid(temp);
【问题讨论】:
你有#include <string>
吗?在头文件中using namespace std;
也是不好的做法
如果您的代码被拆分为多个 cpp 文件,您是否正确链接了目标文件?你用什么命令编译?
不,由于命名空间 std,我没有包含字符串。什么是好的做法?标准::字符串?
向我们展示你的 makefile。同时使用命名空间声明,并且在 cpp 文件中而不是头文件中。
是的,就是这样。谢谢。
【参考方案1】:
首先,我真的怀疑这是您遇到的错误,因为它的格式不正确。也许你得到了一些关于std::basic_string<char, std::char_traits<char>, std::allocator<char> >
的内容,但编译器不太可能吐出你发布的内容,除非你有一些……有趣的……代码。将来,请准确地复制和粘贴,因为专家可以从您认为不重要的细节中获取大量信息。如果您编辑不正确,您可能会严重误导 *** 用户,使他们更难帮助您。
现在,问题的最可能原因是您不知道 compile 步骤和 link 步骤之间的区别。 “未定义的引用”错误是 链接器 错误。
这意味着你的头文件是正确的——你的代码编译了,但你没有把所有的目标文件正确地放在最后——所以,g+ -c MigratingUser.cpp
的输出没有包含在g++ -c main.cpp
的输出中(或任何您命名的“使用”代码)。
您可以像这样一次性完成编译和链接(对于简单项目):
g++ -o my_executable MigratingUser.cpp main.cpp
这将编译和链接两个文件一起。
【讨论】:
以上是关于对现有类的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章