0
emp* emp::check(string a,emp* ceo)
{
   emp* l;
   employee* b;
   l=ceo;
   if(l->name==a)
   {
    cout<<l->name;
    return l;
   }
   b=l->j;
   while (b!=NULL)
   {
      check(a,b->junior);
      b=b->next;
   }
}

void main()
{
   l = check(d,ceo);
   cout<<l->name;
}

现在最初的值l->name被打印,但最终的mainl没有被返回。
这意味着它正在到达return语句但l没有被返回。
有人可以解释为什么吗?

4

1 回答 1

3

正在发生的事情是,它在递归调用之一中匹配,check然后您丢弃返回值。您需要将函数更改为如下所示:

emp* emp::check(string a,emp* ceo)
{
   emp* l;
   employee* b;
   l=ceo;
   if(l->name==a)
   {
    cout<<l->name;
    return l;
   }
   b=l->j;
   while (b!=NULL)
   {
      l = check(a,b->junior); // <----- line changed
      if (l)
         return l;            // If we found something, return it. 
      b=b->next;
   }

   return 0; // <----- Always return a value
}

此外,您的代码存在各种风格问题,如果您进行了这样的更改以使您的变量和函数名称有用,则会更清楚:

emp* emp::findEmployeeByName(string name,emp* root)
{
   if(root->name==a)
   {
    cout<<root->name;
    return root;
   }

   // What on earth is ->j? Give your members meaningful names
   for (employee* worker=l->j; worker; worker = worker->next)
   {
      emp* match = findEmployeeByName(name,worker->junior); // <----- line changed
      if (match)
         return match;            // If we found something, return it. 
   }

   return 0; // <----- Always return a value
}
于 2013-09-08T08:32:56.923 回答