对现有类的未定义引用

undefined reference to existing class

本文关键字:未定义 引用      更新时间:2023-10-16
#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);

首先,我真的怀疑这是你得到的错误,因为它的格式不正确。也许你得到了一些谈论std::basic_string<char, std::char_traits<char>, std::allocator<char> >的东西,但编译器不太可能吐出你发布的内容,除非你有一些......有趣。。。法典。将来,复制和粘贴正是因为专家可以从您认为不重要的细节中获得大量信息。如果你编辑不正确,你可能会严重误导StackOverflow用户,使他们更难帮助你。

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

这意味着你的标头没问题 - 你的代码可以编译,但你没有在最后正确地将所有目标文件放在一起 - 所以,g+ -c MigratingUser.cpp的输出不包含在g++ -c main.cpp的输出中(或任何你命名的"usage"代码(。

您可以一次性进行编译和链接(对于简单的项目(,如下所示:

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

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