Der C2440-Fehler (aus 'char' auf 'Text_iterator' nicht konvertieren, um auf dieser Linie auftritt):Bereich for-Schleife erkennt falschen Typen (C2440)
void print(Document& d)
{
for (Text_iterator p : d) cout << *p;
}
Ersetzen 'Text_iterator' mit 'auto' gibt der 'illegale indirekte Fehler' (dereferenzierter Typ muss ein Zeiger sein).
Das Klassendokument hat die Funktionen begin() und end() definiert (wobei Text_iterator zurückgegeben wird), und Text_iterator verfügt über die üblichen Iteratoroperatoren. Hier ist der Code:
class Text_iterator
{
list<Line>::iterator ln;
Line::iterator pos;
public:
// . . .
char& operator*() { return *pos; }
Text_iterator& operator++();
// . . .
};
Und Dokument:
struct Document
{
list<Line> line;
Text_iterator begin()
{
// . . .
}
Text_iterator end()
{
// . . .
}
// . . .
};
oder (besser IMHO) 'für (const Auto & p: d) cout <
@JesperJuhl guter Punkt. Zur Antwort hinzugefügt – NathanOliver