C++问题返回通过引用本地创建的对象

C++ Issue returning object created locally via reference

本文关键字:创建 对象 引用 问题 返回 C++      更新时间:2023-10-16

请耐心等待。。我一直在学习谷歌教育C++课程,目前正在从事数据库项目。该程序的思想是,我们创建一个数据库对象,该对象又包含一组composer对象。这些composer对象包含通过setter和getter访问的属性和信息。我们得到了头文件和两个测试实现文件,我们需要实现头定义。

问题是,如果我错了,请纠正我,我们被要求定义以下标头声明:

Composer& AddComposer(string in_first_name, string in_last_name,
string in_genre, int in_yob, string in_fact);

这包括在函数中本地创建一个Composer对象,将其添加到Composer数组中,然后返回对该Composer对象的引用。据我所知,本地Composer对象在函数返回时被释放,引用基本上什么都不引用。我的第一个问题是,在AddComposer中创建的Composer对象是否可以作为引用返回?如果可以,应该返回吗?

我对AddComposer的实现如下:

Composer& Database::AddComposer(string in_first_name, 
string in_last_name,
string in_genre, 
int in_yob, 
string in_fact) {
// Creating a new composer object
Composer composer;
composer.set_first_name(in_first_name);
composer.set_last_name(in_last_name);
composer.set_composer_yob(in_yob);
composer.set_composer_genre(in_genre);
composer.set_fact(in_fact);
// Adding the newly created composer object to the composers_ array
composers_[next_slot_] = composer;
// Increment the next_slot_ counter
next_slot_ ++;
return composers_[(next_slot_-1)];
}

相反,我尝试将composers_array中的对象返回为其全局定义的对象。这个代码仍然产生错误:

C:UsersjprestidAppDataLocalTempccnMv1rz.o:test_database.cpp:(.text+0x1a8): undefined reference to `Composer::Promote(int)'
c:/Program Files/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: C:UsersjprestidAppDataLocalTempccnMv1rz.o: bad reloc address 0x10 in section `.xdata'
collect2.exe: error: ld returned 1 exit status

Promote()是从AddComposer()函数返回的Composer对象上调用的第一个函数。

我的代码库在Github上,如果有任何帮助,我们将不胜感激。这个问题困扰了我一整天!很抱歉我的帖子太大了,再次感谢

Jarvis

编辑:这是一个编译问题,正如宏a所指出的,我没有包括必要的文件compose.cpp。我觉得自己很傻。谢谢大家

我下载了您的代码,并在Windows机器上使用mingw64进行了编译:它运行良好。

未定义的引用(如注释中所确认的)是由于您没有在编译行中包括所有的cpp文件。

g++test_database.cpp database.cppcomposer.cpp-o测试