C ++通过引用在本地创建返回对象

时间:2015-04-20 09:39:35

标签: c++ reference

请耐心等待我...我一直在关注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纠正指出的那样。我觉得很傻。谢谢大家。

1 个答案:

答案 0 :(得分:1)

我下载了你的代码并在Windows机器上用mingw64编译它:它工作正常。

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

  

g ++ test_database.cpp database.cpp composer.cpp -o test