错误:预期';' 在'!'之前 代币

Leo*_*eon 0 c++

// std:: iterator sample
#include <iostream>  // std::cout
#include <iterator>  // std::iterator, std::input_iterator_tag

class MyIterator:public std::iterator<std::input_iterator_tag, int>
{
int *p;
public:
MyIterator(int *x):p(x){}
MyIterator(const MyIterator& mit):p(mit.p){}
MyIterator& operator++(){++p; return *this;}
MyIterator operator++(int){MyIterator tmp(*this);operator++(); return tmp;}
bool operator==(const MyIterator& rhs){return p == rhs.p;}
bool operator!=(const MyIterator& rhs){return p!rhs.p;}
int& operator*(){return *p;}
};

int main(){
int numbers[] = {10, 20, 30, 40, 50};
MyIterator from(numbers);
MyIterator until(numbers+5);
for (MyIterator it=from; it!=until; it++)
std::cout << *it << '';
std::cout << '\n';

return 0;
};
Run Code Online (Sandbox Code Playgroud)

当我试图更好地理解"迭代器"是什么时.我将这些代码复制到我的编译器(codeBlock).有一个错误:"预期';' 在'!'之前 令牌".那有什么关系?

Mik*_*our 11

你有一个拼写错误operator!=:

p!rhs.p
Run Code Online (Sandbox Code Playgroud)

应该读

p != rhs.p
Run Code Online (Sandbox Code Playgroud)

或者,更一般地说,

!(*this == rhs)
Run Code Online (Sandbox Code Playgroud)

此行中还有一个无效的空字符常量:

std::cout << *it << '';
                    ^^  // Get rid of that, or change it to something sensible
Run Code Online (Sandbox Code Playgroud)


Chr*_*tle 7

看起来就是这条线:

bool operator!=(const MyIterator& rhs){return p!rhs.p;}
Run Code Online (Sandbox Code Playgroud)

把它改成这个:

bool operator!=(const MyIterator& rhs){return p != rhs.p;}
Run Code Online (Sandbox Code Playgroud)