我一直在阅读文本材料以磨练我的C ++技能,并且我的迭代器字符串实验遇到了麻烦。我想要做的是取一个字符串,遍历字符串中的每个元素,并输出字符串中的每个元素。但是,由于我正在学习如何使用箭头操作符,编译器告诉我无法访问成员字符串:: empty。变量aIter不具有类型string :: iterator吗?
#include <iostream>
#include <string>
using namespace std;
int main()
{
string sString("some string!");
for(auto aIter = sString.cbegin();
aIter != sString.cend() && !aIter->empty();
aIter++)
cout << *aIter << endl;
cout << endl;
return 0;
}
Error:
request for member 'empty' in '* aIter.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator-><const char*, std::basic_string<char> >()', which is of non-class type 'const char'|
答案 0 :(得分:1)
您正在迭代字符串的字符。角色没有会员功能,也没有“空”的概念。
您可能只想删除!aIter->empty()
测试,迭代直到到达字符串的末尾。即使字符串为空,这也会起作用:cbegin()
迭代器将等于cend()
迭代器,因此循环将立即结束。
如果你想检查字符串是否为空(你不需要在这里做),那就是sString.empty()
。