【问题标题】:Compiler cannot find function in circular recursive reference [duplicate]编译器在循环递归引用中找不到函数[重复]
【发布时间】:2016-12-19 17:34:10
【问题描述】:

当A递归并调用B,B调用A时,我尝试在C++中执行递归函数,但是当它编译时,编译器找不到这两个函数之一。在c++中是正常的,但是有办法绕过吗?

编辑:阅读前向声明后,我已经解决了这个问题。

【问题讨论】:

  • 前向声明
  • 这正是我需要的,谢谢
  • 能否提供未编译的源代码?
  • 只是前向声明的典型案例。但是当我写这个问题时,我确实知道这些术语。为了解决这个问题,你必须在你的 cade 开始时添加函数的签名。

标签: c++ recursion


【解决方案1】:

在这样的代码开头添加函数的签名(代码真的很垃圾):

void gererParenthese(vector<string> &expressionV, unsigned int &i);
gererParenthese(expressionV, i);

void gererParenthese(vector<string> &expressionV, unsigned int &i)
{
	if ((expressionV[i]).compare("(") == 0)
	{
		int nbrPa = 0;
		vector<string> tempo;
		do
		{
			i++;
			if ((expressionV[i]).compare("(") == 0)
			{
				nbrPa++;
			}
			else if ((expressionV[i]).compare(")") == 0)
			{
				nbrPa--;
			}

			tempo.push_back(expressionV[i]);
		} while (nbrPa != 0);
		tempo.pop_back();
		(expressionV[i]) = evaluer(tempo);
		i--;
	}
}


double evaluer(vector<string> expressionV)
{
	double resultat = 0;
	for (unsigned int i = 0; i < expressionV.size(); ++i)
	{
		if ((expressionV[i]).compare("(") == 0)
		{
			gererParenthese(expressionV, i);
		}
		else if ((expressionV[i]).compare("/") == 0)
		{
			int iT = i;
			gererParenthese(expressionV, i);
			
			double temp =atof((expressionV[i]).c_str());
			resultat = resultat /temp ;
			expressionV[i] = resultat;

		}
		else if ((expressionV[i]).compare("*") == 0)
		{
			int iT = i;
			gererParenthese(expressionV, i);
			double temp = atof((expressionV[i]).c_str());
			resultat = resultat * temp;
			expressionV[i] = resultat;
		}
		else if ((expressionV[i]).compare("-") == 0)
		{
			int iT = i;
			gererParenthese(expressionV, i);
			double temp = atof((expressionV[i]).c_str());
			resultat = resultat - temp;
			expressionV[i] = resultat;
		}
		else if ((expressionV[i]).compare("+") == 0)
		{
			int iT = i;
			gererParenthese(expressionV, i);
			double temp = atof((expressionV[i]).c_str());
			resultat = resultat + temp;
			expressionV[i] = resultat;
		}
		else
		{
			double temp = atof((expressionV[i]).c_str());
			resultat = temp;
		}

	}
	return resultat;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-06
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2012-11-01
    • 2014-10-02
    • 1970-01-01
    相关资源
    最近更新 更多