错误:标签"foo"已使用但未定义

Hur*_*ist 4 c++ label goto function

所以我在使用一些C++时搞错了,并且使用一些看起来像这样的代码得到了前面提到的错误:

#include <iostream>
using namespace std;

char foodstuffs;

void fruit()
{
cin>>foodstuffs;
switch(foodstuffs)
{
case 'a': goto foo; break;
case 'b': goto fooo; break;
}
}

int main()
{
cout<<"What do you want to eat? (a/b)";
fruit();
foo: cout<<"You eat an apple.";
fooo: cout<<"You eat a banana.";
}
Run Code Online (Sandbox Code Playgroud)

确切的代码要复杂得多,但这只是为了向您展示我得到的错误.

现在我意识到每个人都出于某种原因鄙视"goto"声明,但是我的实际代码中充满了很多东西,我没有时间/耐心回过头来改变它们.另外,我是一个新手程序员,我发现很难使用的东西和标签.

我的问题是如何预定义这些标签,以便函数fruit()知道它们是什么?另外,我需要在不将标签移出主功能的情况下执行此操作.

Som*_*ude 7

goto语句只能转到本地定义的标签,它不能跳转到其他功能.

因此,main不会引用标签,并且goto语句fruit中将找不到标签.

  • @UrameshYusuke 我的建议是:**不要!** 如果您需要在功能之间跳转,您的设计很可能有缺陷。相反,从具有特殊值的函数中“返回”,然后在调用方的返回值上使用“if”或“switch”来执行不同的操作。在某些“非常有限”的情况下使用“goto”可能很有用,但对于大多数用途,总是有其他更好的解决方案。 (2认同)