C++ 如果在函数中不起作用

C++ If in function not woking

我是 C++ 的新手,我正在尝试自己制作 "cmd"。仍然收到错误:“|11|错误:return-带有值的语句,在函数 returning '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;
}

为了扩展 Philipp Braun 的回答,确切的问题是如果一个函数被声明为 void,它不能有一个实际的 return 值。 [具体来说,它只能有一个 return 类型 void 的值,这基本上意味着它可以 return 什么都不是,也可以是另一个本身 return 什么都不是的函数的结果。 ]

// 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);
}

在函数声明 and/or 定义中,名称前显示的第一个类型是函数的 return 类型,表示函数 return 的类型。如果是void,函数不允许有return值;任何 return 语句必须在没有表达式的情况下使用,或者使用类型为 void.

的表达式

return 语句采用以下形式:

return /* expression */;

在这种情况下,expression 可以是任何有效的表达式(例如 return 1 + 1;return functionName();),或者对于具有return 类型 void。请注意,对于 return 类型为 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 语句,则函数 return 在执行其最终语句时执行;对于 main(),这被视为函数以 return 0; 结尾,或者对于任何其他函数,函数以 return; 结尾。

还要注意,如果任何 value-returning 函数 return 没有 return 值,无论是通过遇到和执行 return; 显式地还是通过到达结尾隐式地函数,那么它会导致未定义的行为。 (main() 由于其隐含的 return 语句 returning 0 隐含地不受这种情况的影响,但如果它遇到显式的 return 没有值的语句。


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

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