Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将hpp和cpp问题与g++;编译程序 我对C++比较陌生,有一个坚实的C和面向对象的背景。因此,我编写了以下代码。 我有Person.hpp,如下所示: 班级人员 { 私人: 结构h { 字符*名称; 无符号字符年龄; }; 结构实体; 公众: 无符号字符年龄(); char*name(); 人员(字符*姓名,未签名字符a); ~Person(); };_C++_Oop_G++ - Fatal编程技术网

将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?