ALL_OF从'char'无效转换为'const char *'[-fpermissive]

时间:2013-12-29 18:53:25

标签: c++

编译代码时遇到问题。

template<class InputIterator, class UnaryPredicate>
  bool all_of (InputIterator first, InputIterator last, UnaryPredicate pred)
{
  while (first!=last) {
    if (!pred(*first)) return false;
    ++first;
  }
  return true;
}

我从http://www.cplusplus.com/reference/algorithm/all_of/?kw=all_of获取了代码。

我正在使用Code :: blocks 12.11,我有以下错误:

  

C:\ Users \ PC-HP \ Desktop \ chiffre \ romain \ main.cpp ||实例化'bool all_of(InputIterator,InputIterator,UnaryPredicate)[with InputIterator = __gnu_cxx :: __ normal_iterator&gt ;; UnaryPredicate = bool(*)(std :: basic_string)]':|

     

C:\ Users \ PC-HP \ Desktop \ chiffre \ romain \ main.cpp | 84 |从这里要求|

     

C:\ Users \ PC-HP \ Desktop \ chiffre \ romain \ main.cpp | 13 |错误:从'char'无效转换为'const char *'[-fpermissive] |

     

c:\ program files \ codeblocks \ mingw \ bin .. \ lib \ gcc \ mingw32 \ 4.7.1 \ include \ c ++ \ bits \ basic_string.tcc | 214 | error:初始化'std :: basic_string&lt的参数1 ; _CharT,_Traits,_Alloc&gt; :: basic_string(const _CharT *,const _Alloc&amp;)[with _CharT = char; _Traits = std :: char_traits; _Alloc = std :: allocator]'[-fpermissive] |

     

|| ===构建完成:2个错误,2个警告(0分钟,1秒)=== |

第84行:

while(!all_of(romain.begin(), romain.end(), IsRoman))

我的整个代码都是:http://pastebin.com/k0KYNB6H 我不使用c++11

2 个答案:

答案 0 :(得分:0)

根据您的错误消息,您的谓词需要std::basic_string(可能真的是std::string),但您正在迭代char的序列。这些不会转换为std::string。你想传递像

这样的谓词
bool IsRoman(char c) {
    return ...;
}

答案 1 :(得分:0)

pred需要一个字符串,但在表达式pred(*first)中,您只需要一个char