C++问题返回通过引用本地创建的对象
C++ Issue returning object created locally via reference
请耐心等待。。我一直在学习谷歌教育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测试
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 创建对象并防止被破坏
- 在C++中,友元类可以从友元类创建对象吗
- 只在堆中创建C++对象
- 创建用户定义的复制构造函数时无法创建对象