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
没有值的语句。
我知道这对于您的第一天编程来说可能有点复杂,但基本上可以归结为:
return
语句应该与函数本身具有相同的类型。如果函数是 void
,它 returns void
。如果函数是 int
,它 return 是一个 int
。如果函数是 char*
,它 return 是指向 char
的指针。等等。
- 如果程序到达
main()
的末尾而没有遇到 return
语句,它会隐式插入 return 0;
语句以指示程序成功完成。
- 如果程序到达任何其他函数的末尾而没有遇到
return
语句,它会隐式插入一个空的 return
语句,特别是“return;
”。这对 void
函数没问题,但可能会导致任何其他 return 类型的函数出现问题。
我是 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
没有值的语句。
我知道这对于您的第一天编程来说可能有点复杂,但基本上可以归结为:
return
语句应该与函数本身具有相同的类型。如果函数是void
,它 returnsvoid
。如果函数是int
,它 return 是一个int
。如果函数是char*
,它 return 是指向char
的指针。等等。- 如果程序到达
main()
的末尾而没有遇到return
语句,它会隐式插入return 0;
语句以指示程序成功完成。 - 如果程序到达任何其他函数的末尾而没有遇到
return
语句,它会隐式插入一个空的return
语句,特别是“return;
”。这对void
函数没问题,但可能会导致任何其他 return 类型的函数出现问题。