在eclipse c ++中"控制到达非void函数的结束"警告但没有编译或运行时错误

wbr*_*wbr 5 c++ eclipse null return

这是我的代码:

Composer& Database::GetComposer (string in_last_name)
{   
    for (int i = 0; i < next_slot_; i++)
    {
        if (composers_[i].last_name() == in_last_name)
             return composers_[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是遍历一个Composer对象数组,并返回对last_name字段与"in_last_name"匹配的对象的引用.我理解警告告诉我的是,该函数可能不会返回任何内容(例如,如果用户提供了无效的姓氏).我的问题是,我该如何避免这种情况?我尝试在for循环后添加"return 0"和"return NULL",它不会编译.如果找不到任何内容,此方法是否应抛出异常?

Gre*_*ill 6

声明您的函数返回a Composer&,即对a的引用Composer.如果您的函数未能返回合适的引用,并且调用者尝试使用返回值,则会导致未定义的行为.

如果您的函数可能合法地无法找到它正在查找的内容,您可能希望将返回类型更改为指针而不是引用.这会让你选择返回NULL:

Composer* Database::GetComposer (string in_last_name)
{   
    for (int i = 0; i < next_slot_; i++)
    {
        if (composers_[i].last_name() == in_last_name)
             return &composers_[i];
    }
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以在函数无法找到目标时抛出异常.