复制
收藏
提问
简洁
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
6天前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
编译错误分析
- 错误类型: 类型不匹配和符号比较警告。
- 错误位置: Main.cc 文件的第15和16行。
错误详情
- 警告: 符号和无符号整数比较。
- 错误: 字符串类型和字符类型之间的减法操作无效。
解决方法
- 符号比较: 将循环变量
i
声明为无符号类型。 - 类型不匹配: 确保
s
是字符类型,而不是字符串类型。
具体修改
-
符号比较:
for(unsigned int i=0; i < s.size(); i++) {
-
类型不匹配:
a[s[i] - 'a']++;
解释
- 符号比较: 将
i
声明为unsigned int
以匹配s.size()
的无符号类型。 - 类型不匹配: 使用
s[i]
获取字符串中的字符,而不是整个字符串s
。
通过这些修改,可以消除编译警告和错误,确保代码正确运行。
你觉得结果怎么样?