[英]OSX What does “error: cannot convert 'const std::__cxx11::basic_string<char>” mean?
[英]error: cannot convert ‘std::__cxx11::basic_string<char>::iterator’
我正在編寫一個程序來檢查輸入短語是否是回文。 在 MacBook Pro 上使用 Xcode 編譯可以正常工作。 在 zyBooks 網站上編譯返回錯誤。
如何更新我的代碼以解決此問題?
我的代碼是:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string userInput, palindromeCheck, reversedInput;
getline(cin, userInput);
palindromeCheck = userInput;
remove(palindromeCheck.begin(), palindromeCheck.end(), ' ');
palindromeCheck.erase(palindromeCheck.size() - 3, palindromeCheck.size());
int temp = 1;
while (temp < palindromeCheck.size() + 1)
{
reversedInput += palindromeCheck.at(palindromeCheck.size() - temp);
++temp;
}
if (reversedInput == palindromeCheck)
{
cout << userInput << " is a palindrome";
}
else
{
cout << userInput << " is not a palindrome";
}
cout << endl;
return 0;
}
zyBooks 的完整錯誤代碼如下:
main.cpp: In function ‘int main()’:
main.cpp:14:33: error: cannot convert ‘std::__cxx11::basic_string<char>::iterator’ {aka ‘__gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >’} to ‘const char*’
14 | remove(palindromeCheck.begin(), palindromeCheck.end(), ' ');
| ~~~~~~~~~~~~~~~~~~~~~^~
| |
| std::__cxx11::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >}
In file included from /usr/include/c++/9/cstdio:42,
from /usr/include/c++/9/ext/string_conversions.h:43,
from /usr/include/c++/9/bits/basic_string.h:6493,
from /usr/include/c++/9/string:55,
from /usr/include/c++/9/bits/locale_classes.h:40,
from /usr/include/c++/9/bits/ios_base.h:41,
from /usr/include/c++/9/ios:42,
from /usr/include/c++/9/ostream:38,
from /usr/include/c++/9/iostream:39,
from main.cpp:1:
/usr/include/stdio.h:178:32: note: initializing argument 1 of ‘int remove(const char*)’
178 | extern int remove (const char *__filename) __THROW;
| ~~~~~~~~~~~~^~~~~~~~~~
main.cpp:20:17: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
20 | while (temp < palindromeCheck.size() + 1)
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
不包含algorithm.h
庫的remove()
function 用於刪除系統中的現有文件。 此 function 的 function 簽名如下所示:
int remove(const char *_Filename)
另一方面,在使用algorithm.h
之后,您現在可以將remove()
用於迭代器:
_FIter remove<_FIter, _Tp>(_ForwardIterator __first, _ForwardIterator __last, const _Tp &__value)
問題是 function 沒有過載,它接受std::string
object begin()
和end()
作為 arguments。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.