Zugriff auf ein Klassen-Array-Element mit. in C ++ oder Fehler in Stroustrup Buch

8

In dem Buch Programming Principles and Practice mit C ++ von B. Stroustrup bin ich auf ein Stück Code gestoßen, bei dem das Argument das Array einer Basisversion der Vektorklasse ist. Die Klasse ist als

definiert %Vor%

Meine Fragen: Ist 'arg.elem.sz' ein gültiger Ausdruck? Wenn ja, auf was wird zugegriffen?

(Übrigens, ich habe versucht, ein einfaches Stück Code zu schreiben, um dies zu versuchen, aber ich bekomme einen Fehler. Da arg.elem ein Zeiger ist, erwartet es, dass ich etwas mehr wie "arg.elem- & gt." ;)

Danke!

EDIT / UPDATE: Die Syntax scheint korrekt zu sein. Betrachtet man die Definition von Kopie, ist das Argument ein "Iterator". Ich vermute, dass es etwas geben muss, um das Argument in einen Iterator-Typ zu konvertieren, dann wird das sz-th pointed-Element auf das Element des Iterators zugreifen? Abklärungen wurden begrüßt:)

    
Silvia 17.04.2017, 12:11
quelle

2 Antworten

2

Dies ist nur ein Tippfehler, das arg.elem.sz ist kein gültiger Ausdruck, weil arg.elem ein double* ist, auf das kein Mitglied zugreifen kann (auch nicht mit dem -> opertor). Es sollte arg.elem + sz da sein, denn so funktioniert std::copy .

In Ihrem Update haben Sie nach dem Iterator und dem std::copy Algorithmus. Die std::copy ist eine Funktionsvorlage , die jeden Typ als Eingabe und als Ausgabe-Iteratoren akzeptiert, wenn sie die Anforderungen erfüllen Anforderungen eines Eingabe-Iterators und einer Ausgabe-Iterator . Ein Zeiger auf ein Array-Element erfüllt die genannten Anforderungen, sodass arg.elem als double* als Iterator verwendet werden kann.

Wenn wir die fragliche Codezeile in das Folgende ändern, ergibt das einen Sinn:

%Vor%

Der obige Code kopiert den Inhalt des Arrays zwischen arg.elem und arg.elem + sz in das Array, auf das elem zeigt.

    
Akira 24.06.2017, 23:15
quelle
0

Der Versuch, das zu kompilieren (benutze myvector anstelle von Vektor, um Kollisionen mit dem Standardvektor zu verhindern) mit gcc erhält man:

%Vor%

Ich vermute, dass die Errata stattdessen an + sz angepasst werden muss

    
Waslap 10.07.2017 09:17
quelle

Tags und Links