C++ 如果在功能中没有醒来

C++ If in function not woking

本文关键字:醒来 功能 如果 C++      更新时间:2023-10-16

我对C++来说是全新的,我试图制作自己的"cmd"。仍然收到错误:"|11|错误:带有值的返回语句,在函数中返回'void' [-fpermissive]|"...请帮忙:(

在这里代码:

#include <iostream>
#include <string>
using namespace std;
void cmd(int command)
{
    if (command == login)
    {
        cout << "Prikaz login neni k dispozici!";
        return 0;
    }
    else
    {
        cout << "Prikaz ";
        cout << command;
        cout << " neni znamy!";
        return 0;
    }
}
int main()
{
    cout << "Zadejte prikaz: ";
    cin << command;
    cmd(command);
    return 0;
}

不知道你到底打算做什么,但下面的程序应该可以工作。您只是没有正确声明整数变量。

#include <iostream>
#include <string>
using namespace std;
int cmd(string command)
{
    if (command == "login")
    {
        cout << "Prikaz login neni k dispozici!";
        return 0;
    }
    else
    {
        cout << "Prikaz ";
        cout << command;
        cout << " neni znamy!";
        return 0;
    }
}
int main()
{
    string command; /* Define String */
    cout << "Zadejte prikaz: ";
    cin >> command; /* Input */
    cmd(command);
    return 0;
}

为了扩展菲利普·布劳恩的答案,确切的问题是,如果一个函数被声明为void,它就不能有一个实际的返回值。 [具体来说,它只能有一个类型void的返回值,这基本上意味着它可以不返回任何内容,也可以返回另一个本身不返回任何内容的函数的结果。

// Valid.  Function is void, and returns nothing.
void foo(int arg, int u, int ments) {
    doSomethingWith(arg, u, ments);
    return;
}
// Valid.  Returns (with no return value) upon reaching end of function.
void bar(int arg, int u, int ments) {
    doSomethingWith(arg, u, ments);
}
// Valid.  Returns the result of foo(), which itself returns nothing.
void bat(int arg, int u, int ments) {
    doSomethingWith(arg, u, ments);
    return foo(arg, u, ments);
}
// Invalid.  3 is int, not void.
void baz(int arg, int u, int ments) {
    doSomethingWith(arg, u, ments);
    return 3;
}
// Valid again.  Function is int, and returns int.
int quz(int arg, int u, int ments) {
    doSomethingWith(arg, u, ments);
    return 3;
}
// And formally invalid again.  Returns (with no return value) at end of function, instead of returning an int.
// Causes undefined behaviour, which can be... well, anything, really.
int qaz(int arg, int u, int ments) {
    doSomethingWith(arg, u, ments);
}

在函数声明和/或定义中,第一个类型(显示在名称之前)是函数的返回类型,并指示函数返回的内容。 如果是 void ,则不允许该函数具有返回值;任何 return 语句都必须不带表达式使用,或者与类型为 void 的表达式一起使用。

return语句采用以下形式:

return /* expression */;

在这种情况下,表达式可以是任何有效的表达式(例如在 return 1 + 1;return functionName(); 中),或者对于返回类型为 void 的函数可以省略表达式。 请注意,对于返回类型为 void 的函数,不必省略它;下面是一个奇怪但完全有效的程序:

#include <iostream>
void iReturnVoid() {
    std::cout << "I return void." << std::endl;
}
void andSoDoI() {
    std::cout << "I must inform you that ";
    return iReturnVoid();
}
int main() {
    andSoDoI();
}

简而言之,表达式的类型必须与函数开头指定的类型匹配。

如果未显式提供 return 语句,则该函数在执行其 final 语句时返回;这被视为函数以 return 0; 结尾表示main(),或者如果该函数以 return; 结尾表示任何其他函数。

另请注意,如果任何值返回函数返回而不返回值,无论是通过遇到和执行return;显式返回,还是通过到达函数末尾隐式返回,则会导致未定义的行为。 (main() 由于其隐式返回语句返回 0,因此不会隐式发生这种情况,但如果它遇到没有值的显式 return 语句,则可能会遇到麻烦。


我知道这对你的第一天编程来说可能有点复杂,但它基本上归结为:

  1. return语句的类型应与函数本身相同。 如果函数void,则返回void。 如果函数int,则返回一个int。 如果函数char*,则返回指向char的指针。 等等。
  2. 如果程序到达main()末尾而没有遇到 return 语句,它将隐式插入 return 0; 语句以指示程序成功完成。
  3. 如果程序到达任何其他函数的末尾而没有遇到return语句,它会隐式插入一个空的return语句,特别是" return; "。 这对于void函数来说很好,但可能会导致任何其他返回类型的函数出现问题。