【问题标题】:Compiler says this function must return a value but I already have a return statement编译器说这个函数必须返回一个值,但我已经有一个返回语句
【发布时间】:2018-12-03 13:55:50
【问题描述】:
double ProyectMethods::getLat(const char * id) {
ifstream fileA("C:\\Users\\Usuario\\Desktop\\mapas\\Aeropuertos.txt", ios::in);

string latS;
double lat;

string buffer;
string nameA;
size_t n;
size_t z;

if (!fileA) { return; }

while (getline(fileA, buffer))
{
    n = buffer.find(";");
    z = buffer.find(";", n + 1);
    nameA = buffer.substr(0, n);

    if (nameA == id)
    {
        latS = buffer.substr(n + 1, z);
        lat = stod(latS);
        return lat;
    }

}

}

我不知道为什么,但是编译器说这个函数必须返回一个值。 我那边已经有退货了。我做错了什么?

【问题讨论】:

  • 如果fileA的最后一行通过了,没有找到匹配idnameA会发生什么?
  • 你的函数在哪里??你只贴了它的身体吗?如果是这样,那么您的函数必须具有最终的返回语句。或者每个执行分支必须有返回语句。
  • 所有函数中声明为非空返回类型的控制路径必须具有确定的返回值。您的第一个 return ,return; 没有指定任何值,这对于有希望的函数没有意义。解决这个问题,考虑你的第二个,return lat;。当nameA == id从不为真时会发生什么。你的函数的结果是什么?简短回答:如果您承诺函数结果,请履行该承诺并确保 所有 控制路径导致确定的 somethingreturn

标签: c++ visual-studio return return-value


【解决方案1】:

第一个 return 不返回任何内容。它必须返回一个双精度值(函数的返回值是双精度)。

另外,不要忘记函数末尾的 return。如果getline() 失败,则不会激活while,也不会遇到return 语句。但是,这应该不是问题,因为如果函数末尾没有显式的return 0,编译器会隐式插入。

【讨论】:

  • 如果对getline 的调用失败,您还应该在最后提及缺少的返回。
  • 没错。一个函数的返回有两个错误。
【解决方案2】:

当 fileA 为 true 且 nameA != id 时,此函数不会返回任何内容,您应该确保您的函数在任何情况下都返回一些内容。

【讨论】:

    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 2012-04-02
    • 2013-08-26
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多