不好意思,我有一些关于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] "
我理解这与我没有给函数返回值有关。我想知道解决这个问题的最佳实践是什么。
函数
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");
}