“并非所有控制路径都返回一个值”

时间:2011-03-12 16:17:00

标签: c++ function recursion

**编辑:除了下面指出的错误,我错误地尝试将其编译为Win32项目,根据此错误代码

  

1> MSVCRTD.lib(crtexew.obj):错误LNK2019:函数_ _tmainCRTStartup中引用的未解析的外部符号 WinMain @ 16>   所以避免了危机,完成了家庭作业。非常感谢你的帮助。希望当我知道一两件事时,我可以同样向社区支付费用。**

在这个赋值中,我们应该使用递归作为一种技术来确定一个词是否有资格作为回文。虽然我仍然在努力使其成为一种解决问题的机制,但这段代码似乎应该可行。但是,编译器给我“并非所有控制路径返回变量”错误。有任何想法吗?

#include<iostream>
#include<fstream>
#include<string>
using namespace std;

bool palcheck(string word, int first, int last);

int main()
{
  ofstream palindrome, NOTpalindrome;
  ifstream fin;
  string word;

  palindrome.open("palindrontest.txt");
  NOTpalindrome.open("notPalindronetest.txt");
  fin.open("input5.txt"); //list of palindromes, one per line

  if (palindrome.fail() || NOTpalindrome.fail() || fin.fail())
    return -1;

  while (fin >> word)
  {
    if (palcheck(word, 0, (word.size()-1)) == true)
      palindrome << word << endl;
    else
      NOTpalindrome << word << endl;
  }

  palindrome.close();
  NOTpalindrome.close();
  fin.close();

  return 0;
}

bool palcheck(string word, int first, int last)
{
if (first >= last)
return true;

else if (word[first] == word[last])
return palcheck(word, first+1, last-1);

else// (word[first] != word[last])
return false;

}

4 个答案:

答案 0 :(得分:2)

错误在你的palcheck函数中,你忘了返回递归函数的值

bool palcheck(string word, int first, int last)
{
if (first == last)
return true;

else if (word[first] == word[last])
return palcheck(word, first+1, last-1); // <- this return ;)

else// ((word[first] != word[last]) || (first > last))
return false;
}

答案 1 :(得分:2)

错误发生在您的palcheck功能中。如果else if中的表达式为真,则该函数不会返回值。

以下内容应该解决它:

bool palcheck(string word, int first, int last)
{
  if (first == last)
    return true;

  else if (word[first] == word[last])
    return palcheck(word, first+1, last-1);

  else// ((word[first] != word[last]) || (first > last))
    return false;
}

答案 2 :(得分:1)

if (first == last)

需要

if (first >= last)

如果有相同数量的字母。

答案 3 :(得分:1)

bool palcheck(string word, int first, int last)
{
if (first == last)
  return true;
else if (word[first] == word[last])
  palcheck(word, first+1, last-1); // <-here
else
  return false;

// <-reaches here
}

问题标记为here以上。选择该案例时,您不会从函数返回任何内容,这是一个问题。您应该使用:

  return palcheck(word, first+1, last-1);