将hpp和cpp问题与g++;编译程序 我对C++比较陌生,有一个坚实的C和面向对象的背景。因此,我编写了以下代码。 我有Person.hpp,如下所示: 班级人员 { 私人: 结构h { 字符*名称; 无符号字符年龄; }; 结构实体; 公众: 无符号字符年龄(); char*name(); 人员(字符*姓名,未签名字符a); ~Person(); };
将hpp和cpp问题与g++;编译程序 我对C++比较陌生,有一个坚实的C和面向对象的背景。因此,我编写了以下代码。 我有Person.hpp,如下所示: 班级人员 { 私人: 结构h { 字符*名称; 无符号字符年龄; }; 结构实体; 公众: 无符号字符年龄(); char*name(); 人员(字符*姓名,未签名字符a); ~Person(); };,c++,oop,g++,C++,Oop,G++,Person.cpp如下所示: #包括“Person.hpp” char*Person::name() { 返回实体名称; } 未签名字符Person::age() { 返回3.5年; } Person::Person(字符*名称,未签名字符a) { entities.name=名称; a.age=a; } 最后,main.cpp如下所示: g++ -o main main.cpp Person.cpp #包括 #包括“Person.hpp” int main() { 某人(“某物”,100
Person.cpp
如下所示:
#包括“Person.hpp”
char*Person::name()
{
返回实体名称;
}
未签名字符Person::age()
{
返回3.5年;
}
Person::Person(字符*名称,未签名字符a)
{
entities.name=名称;
a.age=a;
}
最后,main.cpp
如下所示:
g++ -o main main.cpp Person.cpp
#包括
#包括“Person.hpp”
int main()
{
某人(“某物”,100);
printf(“%s是%d旧的\n”、someone.name()、someone.age());
返回0;
}
我已经知道,由于字符串不是常量,它将引起警告。在尝试编译时,这不会导致错误。我试着用两种不同的方法编译代码。一种方法是将所有内容一起编译,如下所示:
g++ -o main main.cpp Person.cpp
我尝试的第二种方法是将它们编译成对象文件,然后将它们链接在一起:
g++ -c main.cpp
g++ -c Person.cpp
g++ -o main main.o Person.o
它们都给出了以下错误:
/usr/bin/ld: main.o: in function `main':
main.cpp:(.text+0x5b): undefined reference to `Person::~Person()'
/usr/bin/ld: main.cpp:(.text+0x6e): undefined reference to `Person::~Person()'
collect2: error: ld returned 1 exit status
非常感谢您的帮助。您的头文件中声明了析构函数:
公共:
无符号字符年龄();
char*name();
人员(字符*姓名,未签名字符a);
~Person();// 在头文件中声明了析构函数:
公共:
无符号字符年龄();
char*name();
人员(字符*姓名,未签名字符a);
~Person();// 问题是您在Person.hpp
中声明了构造函数和析构函数,但只在Person.cpp
文件中定义了构造函数
尝试将以下代码添加到Person.cpp
:
Person::~Person()
{
}
问题是您在Person.hpp
中声明了构造函数和析构函数,但只在Person.cpp
文件中定义了构造函数
尝试将以下代码添加到Person.cpp
:
Person::~Person()
{
}
我也有同样的问题,但当我开始使用clion时,它就消失了。是什么让你首先声明~Person()
?为什么不删除它,让隐式定义的问题接管呢?不要编辑你的问题,让问题消失。添加缺少的析构函数会使您得到的答案无效。我也遇到过同样的问题,但当我开始使用Clion时它就消失了。是什么让您首先声明~Person()
?为什么不删除它,让隐式定义的问题接管呢?不要编辑你的问题,让问题消失。添加缺少的析构函数将使您得到的答案无效。是。我只是试了一下;然而,这并没有令人遗憾地改变任何事情:(请确保重新编译目标文件并重新链接它们。建议的修改后,代码似乎可以正常工作:@AnonymousGuy是的,它更改了您的错误消息。非常感谢。我再次尝试编译目标文件,结果成功。是的。我只是尝试了一下;但是,这并没有改变任何内容:(请确保重新编译目标文件并重新链接它们。建议的修改后,代码似乎可以正常工作:@AnonymousGuy是的,它更改了您的错误消息。非常感谢。我再次尝试编译目标文件,结果成功了。我试着按照之前的建议执行此操作;但这没有改变。)anything@AnonymousGuy是的,它改变了你的急诊室ror message.Clean all.o files and recompile Person.cpp在重建之前是否尝试过清理旧的对象文件?我尝试过按照之前的建议执行此操作;但是这没有改变anything@AnonymousGuy是,它更改了您的错误消息。请清理所有.o文件并重新编译Person.cpp在r之前是否尝试清理旧的对象文件ebuild?