编译器在循环递归引用中找不到函数

时间:2016-12-19 17:34:11

标签: c++ recursion

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

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

1 个答案:

答案 0 :(得分:0)

在代码的创建中添加函数的签名(代码真的是垃圾):

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