c++函数(错误:control may reach end of non - void function)



不好意思,我有一些关于c++的初学者问题

我写了一个for循环来获取字符串中的所有字母:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string key = "apple";
    for(int i = 0; i < key.length(); i++)
    {
        cout << key[i] << "n";
    }
}

我在把这个操作(列出字符串的所有字符)转换成一个单独的函数时遇到了麻烦。

#include <iostream>
#include <string>
using namespace std;
string stringiterate(string key)
{
    for(int i = 0; i < key.length(); i++)
    {
        cout << key[i] << "n";
    }
}
int main()
{
    cout << stringiterate("testing");
}

虽然这工作,它给我的错误"警告:控制到达非空函数的结束[-Wreturn-type] "

我理解这与我没有给函数返回值有关。我想知道解决这个问题的最佳实践是什么。

我读过其他SO帖子,其中控制中断,但我不能100%确定为什么我得到这个错误。

函数

string stringiterate(string key)

应该返回一个string,但不返回任何东西。

警告:控制到达非void功能结束

这个警告或错误总是意味着你有一个函数返回非void(意味着void以外的东西),没有返回语句。如果说一个函数返回某物,它必须有一个返回语句。然而,在这种情况下,我不认为return语句是必要的,甚至是有帮助的。你的函数应该只有void作为它的返回类型:

 void stringiterate(string key);

同样,即使你修复了代码,你也会得到另一个错误。这与这一行有关:

cout << stringiterate("testing");

stringiterate返回void,你试图打印它?这对编译器来说是没有意义的,所以它会为你发出一个错误。此外,您的函数已经在内部使用了cout,因此没有必要在函数定义之外使用它。只需单独调用函数:

stringiterate("testing");

最后,cout已经具有打印字符串的能力。不如这样做:

std::string test = "testing";
std::cout << test;

因为你说你要返回一些东西,然后你没有!

int main()  // expects an int to be returned
{
    cout << stringiterate("testing");
    // Nope. No return statement here.
    // Try:
    return 0;
}

stringiterate和原始main相同

如果你不想返回任何东西,返回类型可以是void(对于stringiterate - main通常期望返回int)。例:void stringiterate(string key)

代码看起来应该是这样的:

#include<iostream>
void stringiterate(std::string key)
{
   for(int i = 0; i < key.length(); i++)
  {
       cout << key[i] << "n";
  }
}
int main()
{
  stringiterate("testing");
}

相关内容

最新更新