我尝试在C ++中执行递归函数,当A是递归的并且调用B,B调用A时,但是当它编译时,编译器找不到这两个函数中的一个。在c ++中是正常的,但是有办法绕过这个吗?
编辑:在阅读了关于前向声明之后,我已经解决了这个问题。
答案 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;
}