一点警告

时间:2019-01-26 17:55:48

标签: c++

错误警告: instancebase.cpp(607):警告C4715:'CInstanceBase :: GetPrestigeGrade':并非所有控制路径都返回值

代码:

#ifdef ENABLE_TITLE_SYSTEM
int CInstanceBase::GetPrestige()
{
    return m_sPrestige;
}

UINT CInstanceBase::GetPrestigeGrade()
{
    int pTitle_vegas[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };

    if (m_sPrestige == pTitle_vegas[1])
        return 0;
    else if (m_sPrestige == pTitle_vegas[2])
        return 1;
    else if (m_sPrestige == pTitle_vegas[3])
        return 2;
    else if (m_sPrestige == pTitle_vegas[4])
        return 3;
    else if (m_sPrestige == pTitle_vegas[5])
        return 4;
    else if (m_sPrestige == pTitle_vegas[6])
        return 5;
    else if (m_sPrestige == pTitle_vegas[7])
        return 6;
    else if (m_sPrestige == pTitle_vegas[8])
        return 7;
    else if (m_sPrestige == pTitle_vegas[9])
        return 8;
    else if (m_sPrestige == pTitle_vegas[10])
        return 9;
    else if (m_sPrestige == pTitle_vegas[11])
        return 10;
    else if (m_sPrestige == pTitle_vegas[12])
        return 11;
    else if (m_sPrestige == pTitle_vegas[13])
        return 12;
    else if (m_sPrestige == pTitle_vegas[14])
        return 13;
    else if (m_sPrestige == pTitle_vegas[15])
        return 14;
    else if (m_sPrestige == pTitle_vegas[16])
        return 15;
    else if (m_sPrestige == pTitle_vegas[17])
        return 16;
    else if (m_sPrestige == pTitle_vegas[18])
        return 17;
    else if (m_sPrestige == pTitle_vegas[19])
        return 18;
    else if (m_sPrestige == pTitle_vegas[0])
        return 19;
}
#endif

它是一个二进制源。 我该如何重写代码以禁用此警告? 我是初学者

1 个答案:

答案 0 :(得分:2)

最后一个条件为return时,函数结尾没有false语句。因此,最后一部分可以更改为

else if (m_sPrestige == pTitle_vegas[0])
    return 19;

对此

return 19;

实际上,所有else都只会使代码混乱,因为每个return X;之前都可以将它们删除。

但是该功能可以从根本上简化为

UINT CInstanceBase::GetPrestigeGrade()
{
    if(m_sPrestige == 0) {
        return 19;
    }
    return m_sPrestige - 1;
}