复制
收藏
提问
简洁

Main.cc: In function ‘int main()’: Main.cc:15:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i=0;i<s.size();i++){ ^ Main.cc:16:12: error: no match for ‘operator-’ (operand types are ‘std::string {aka std::basic_string<char>}’ and ‘char’) a[s-'a']++; ^ Main.cc:16:12: note: candidates are: In file included from /usr/include/c++/4.8.2/bits/stl_algobase.h:67:0, from /usr/include/c++/4.8.2/bits/char_traits.h:39, from /usr/include/c++/4.8.2/ios:40, from /usr/include/c++/4.8.2/istream:38, from /usr/include/c++/4.8.2/sstream:38, from /usr/include/c++/4.8.2/complex:45, from /usr/include/c++/4.8.2/ccomplex:38, from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/stdc++.h:52, from Main.cc:1: /usr/include/c++/4.8.2/bits/stl_iterator.h:327:5: note: template<class _Iterator> typename std::reverse_iterator<_Iterator>::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&) operator-(const reverse_iterator<_Iterator>& __x, ^ /usr/include/c++/4.8.2/bits/stl_iterator.h:327:5: note: template argument deduction/substitution failed: Main.cc:16:13: note: ‘std::string {aka std::basic_string<char>}’ is not derived from ‘const std::reverse_iterator<_Iterator>’ a[s-'a']++; ^ In file included from /usr/include/c++/4.8.2/bits/stl_algobase.h:67:0, from /usr/include/c++/4.8.2/bits/char_traits.h:39, from /usr/include/c++/4.8.2/ios:40, from /usr/include/c++/4.8.2/istream:38, from /usr/include/c++/4.8.2/sstream:38, from /usr/include/c++/4.8.2/complex:45, from /usr/include/c++/4.8.2/ccomplex:38, from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/stdc++.h:52, from Main.cc:1: /usr/include/c++/4.8.2/bits/stl_iterator.h:379:5: note: template<class _IteratorL, class _IteratorR> decltype ((__y.base() - __x.base())) std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&) operator-(const reverse_iterator<_IteratorL>& __x, ^ /usr/include/c++/4.8.2/bits/stl_iterator.h:379:5: note: template argument deduction/substitution failed: Main.cc:16:13: note: ‘std::string {aka std::basic_string<char>}’ is not derived from ‘const std::reverse_iterator<_Iterator>’ a[s-'a']++; ^ In file included from /usr/include/c++/4.8.2/bits/stl_algobase.h:67:0, from /usr/include/c++/4.8.2/bits/char_traits.h:39, from /usr/include/c++/4.8.2/ios:40, from /usr/include/c++/4.8.2/istream:38, from /usr/include/c++/4.8.2/sstream:38, from /usr/include/c++/4.8.2/complex:45, from /usr/include/c++/4.8.2/ccomplex:38, from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/stdc++.h:52, from Main.cc:1: /usr/include/c++/4.8.2/bits/stl_iterator.h:1104:5: note: template<class _IteratorL, class _IteratorR> decltype ((__x.base() - __y.base())) std::operator-(const std::move_iterator<_Iterator>&, const std::move_iterator<_IteratorR>&) operator-(const move_iterator<_IteratorL>& __x, ^ /usr/include/c++/4.8.2/bits/stl_iterator.h:1104:5: note: template argument deduction/substitution failed: Main.cc:16:13: note: ‘std::string {aka std::basic_string<char>}’ is not derived from ‘const std::move_iterator<_Iterator>’ a[s-'a']++; ^ In file included from /usr/include/c++/4.8.2/bits/stl_algobase.h:67:0, from /usr/include/c++/4.8.2/bits/char_traits.h:39, from /usr/include/c++/4.8.2/ios:40, from /usr/include/c++/4.8.2/istream:38, from /usr/include/c++/4.8.2/sstream:38, from /usr/include/c++/4.8.2/complex:45, from /usr/include/c++/4.8.2/ccomplex:38, from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/stdc++.h:52, from Main.cc:1: /usr/include/c++/4.8.2/bits/stl_iterator.h:1111:5: note: template<class _Iterator> decltype ((__x.base() - __y.base())) std::operator-(const std::move_iterator<_Iterator>&, const std::move_iterator<_Iterator>&) operator-(const move_iterator<_Iterator>& __x, ^ /usr/include/c++/4.8.2/bits/stl_iterator.h:1111:5: note: template argument deduction/substitution failed: Main.cc:16:13: note: ‘std::string {aka std::basic_string<char>}’ is not derived from ‘const std::move_iterator<_Iterator>’ a[s-'a']++; ^ In file included from /usr/include/c++/4.8.2/ccomplex:38:0, from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/stdc++.h:52, from Main.cc:1: /usr/include/c++/4.8.2/complex:354:5: note: template<class _Tp> std::complex<_Tp> std::operator-(const std::complex<_Tp>&, const std::complex<_Tp>&) operator-(const complex<_Tp>& __x, const complex<_Tp>& __y) ^ /usr/include/c++/4.8.2/complex:354:5: note: template argument deduction/substitution failed: Main.cc:16:13: note: ‘std::string {aka std::basic_string<char>}’ is not derived from ‘const std::complex<_Tp>’ a[s-'a']++; ^ In file included from /usr/include/c++/4.8.2/ccomplex:38:0, from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/stdc++.h:52, from Main.cc:1: /usr/include/c++/4.8.2/complex:363:5: note: template<class _Tp> std::complex<_Tp> std::opera

cfdcf4885
6天前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些

编译错误分析

  • 错误类型: 类型不匹配和符号比较警告。
  • 错误位置: Main.cc 文件的第15和16行。

错误详情

  • 警告: 符号和无符号整数比较。
  • 错误: 字符串类型和字符类型之间的减法操作无效。

解决方法

  • 符号比较: 将循环变量 i 声明为无符号类型。
  • 类型不匹配: 确保 s 是字符类型,而不是字符串类型。

具体修改

  1. 符号比较:

    for(unsigned int i=0; i < s.size(); i++) {
    
  2. 类型不匹配:

    a[s[i] - 'a']++;
    

解释

  • 符号比较: 将 i 声明为 unsigned int 以匹配 s.size() 的无符号类型。
  • 类型不匹配: 使用 s[i] 获取字符串中的字符,而不是整个字符串 s

通过这些修改,可以消除编译警告和错误,确保代码正确运行。

你觉得结果怎么样?
如何调试C++编译错误?
C++常见编译错误有哪些?
如何避免C++代码中的类型错误?
符号比较警告原因?
类型不匹配错误原因?
如何避免符号比较警告?

以上内容由AI搜集生成,仅供参考

在线客服