对现有类的未定义引用

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 &lt;string&gt;吗?在头文件中using namespace std; 也是不好的做法 如果您的代码被拆分为多个 cpp 文件,您是否正确链接了目标文件?你用什么命令编译? 不,由于命名空间 std,我没有包含字符串。什么是好的做法?标准::字符串? 向我们展示你的 makefile。同时使用命名空间声明,并且在 cpp 文件中而不是头文件中。 是的,就是这样。谢谢。 【参考方案1】:

首先,我真的怀疑这是您遇到的错误,因为它的格式不正确。也许你得到了一些关于std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; 的内容,但编译器不太可能吐出你发布的内容,除非你有一些……有趣的……代码。将来,请准确地复制和粘贴,因为专家可以从您认为不重要的细节中获取大量信息。如果您编辑不正确,您可能会严重误导 *** 用户,使他们更难帮助您。

现在,问题的最可能原因是您不知道 compile 步骤和 link 步骤之间的区别。 “未定义的引用”错误是 链接器 错误。

这意味着你的头文件是正确的——你的代码编译了,但你没有把所有的目标文件正确地放在最后——所以,g+ -c MigratingUser.cpp 的输出没有包含在g++ -c main.cpp 的输出中(或任何您命名的“使用”代码)。

您可以像这样一次性完成编译和链接(对于简单项目):

g++ -o my_executable MigratingUser.cpp main.cpp

这将编译和链接两个文件一起

【讨论】:

以上是关于对现有类的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

使用类标头对函数的未定义引用[重复]

对结构方法的未定义引用[重复]

对静态成员的未定义引用

显示对已定义对象的未定义引用

键入对 `cv::fastFree(void*)' 的未定义引用

对函数 Android NDK 的未定义引用