未定义对“ ***”的引用

时间:2019-01-28 09:00:22

标签: c++ c++11 linker

我定义了一个Cat类,在Cat.h文件中具有成员函数void Cat :: miao()。然后,我通过以下代码在Cat.cpp中实现此功能。

但是,在编译和链接时,出现一个错误,说“对`Cat :: miao()的未定义引用”。代码有什么问题吗?

我的编译器是GNU c11。

----- Cat.h

#include<iostream>
#include<string>
using namespace std;
class Cat
{
    string name;
    public:
        Cat(const string&n):name(n){};
        void miao();
};

----- Cat.cpp

#include"Cat.h"
void Cat::miao()
{
    cout << name << endl;
}

----- main.cpp

#include"Cat.h"
int main()
{
    Cat tom("tom");
    tom.miao();
    return 1;
}

编译方式:

g++ main.cpp

导致此错误:

  

C:\ Users ****:K.o:main.cpp :(。text + 0x69):对`Cat ::的未定义引用   苗()'   collect2.exe:错误:ld返回1退出状态

2 个答案:

答案 0 :(得分:2)

在编译过程的最后一个链接部分,Cat.cpp没有正确链接到main.cpp。

使用命令g++ main.cpp进行编译将尝试编译和链接main.cpp。 Cat.cpp未编译并链接到main.cpp,因为您未在命令行上指定它的名称。

可能的解决方法:编译时使用g++ main.cpp Cat.cpp

如果您打算制作一个大项目,也建议您设置一个Makefile或另一个构建管理器,尽管如果您只是为教程做这件事,并且打算在5分钟之内扔掉这段代码,这是并不需要。

答案 1 :(得分:0)

尝试一下

----- Cat.h

#include<iostream>
#include<string>
using namespace std;
class Cat
{
    string name;
    public:
        Cat(const string&n):name(n){};
        void miao();
};

----- Cat.cpp

#include"Cat.h"
void Cat::miao()
{
    cout << name << endl;
}

----- main.cpp

#include"Cat.h"
int main()
{
    Cat tom("tom");
    tom.miao();
    return 1;
}

编译方式:

g++ main.cpp  cat.cpp

当然可以。