gpt4 book ai didi

c++ - eclipse c++ 中的 "control reaches end of non-void function"警告但没有编译或运行时错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:19 24 4
gpt4 key购买 nike

这是我的代码:

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];
}
}

想法是遍历 Composer 对象数组并返回对其 last_name 字段与“in_last_name”匹配的对象的引用。我明白警告在告诉我什么,即函数可能不会返回任何内容(如果用户提供了无效的姓氏)。我的问题是,我怎样才能避免这种情况?我尝试在 for 循环之后添加“return 0”和“return NULL”,但它无法编译。如果此方法什么也没找到,是否应该抛出异常?

最佳答案

您的函数被声明为返回一个Composer&,即对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;
}

或者,您可以在函数找不到目标时抛出异常。

关于c++ - eclipse c++ 中的 "control reaches end of non-void function"警告但没有编译或运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8410425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com