请耐心等待我...我一直在关注Google Education C ++课程,目前正在研究Database Project。该程序的想法是我们创建一个数据库对象,该对象又包含一组作曲家对象。这些composer对象包含通过setter和getter访问的属性和信息。我们给出了头文件以及两个测试实现文件,我们希望实现头定义。
问题是,请纠正我,如果我错了,我们会被要求定义以下标题声明:
Composer& AddComposer(string in_first_name, string in_last_name,
string in_genre, int in_yob, string in_fact);
这涉及在函数内部创建Composer对象,将其添加到Composers数组中,然后返回该单个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_数组中的对象作为全局定义返回。此codel stil产生错误:
C:\Users\jprestid\AppData\Local\Temp\ccnMv1rz.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:\Users\jprestid\AppData\Local\Temp\ccnMv1rz.o: bad reloc address 0x10 in section `.xdata'
collect2.exe: error: ld returned 1 exit status
Promote()是从AddComposer()函数返回的Composer对象上调用的第一个函数。
我的代码库在Github处于联机状态,我们非常感谢您的帮助。这个问题一直困扰着我!对不起我的帖子大小,再次感谢,
贾维斯
编辑:这是一个编译问题,我没有包含必要的文件composer.cpp,正如Macro A纠正指出的那样。我觉得很傻。谢谢大家。
答案 0 :(得分:1)
我下载了你的代码并在Windows机器上用mingw64编译它:它工作正常。
未定义的引用(在注释中已确认)是由于您未在编译行中包含所有cpp文件而引起的。
g ++ test_database.cpp database.cpp composer.cpp -o test