C ++如果在函数中没有woking

时间:2016-01-24 15:43:01

标签: c++ function if-statement void

我对C ++完全陌生,我试图制作自己的“cmd”。仍然得到错误:“| 11 |错误:带有值的return语句,在函数返回'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;
}

2 个答案:

答案 0 :(得分:1)

不知道你打算做什么,但以下程序应该有效。您根本没有正确声明整数变量。

#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;
}

答案 1 :(得分:0)

为了扩展Philipp Braun的答案,确切的问题是如果一个函数被声明为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();中),或者对于返回类型为{{的函数可以省略1}}。请注意,对于返回类型为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的{​​{1}}结尾,或者就像任何其他函数的函数以return 0;结尾一样。

另请注意,如果任何返回值的函数返回而没有返回值,无论是通过遇到并执行main()显式地还是通过到达函数的末尾隐式地返回,那么它都会导致未定义的行为。 (return;由于隐式返回语句返回return;而无法隐式发生这种情况,但如果它遇到没有值的显式main()语句,则会遇到问题。

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

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