我定义了一个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退出状态
答案 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