Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: VCL (C++ Builder) ::  Frage zu SetLength     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Starwing
Unregistrierter




Beitrag Starwing Unregistrierter 14:38:58 12.03.2012   Titel:   Frage zu SetLength            Zitieren

Hallo. Ich habe folgende Funktion aus einem Delphi-Beispiel und benötige diese in meinem C++Builder2009 ebenfalls, allerdings sagt dieser mir immer diese sei undefiniert, obwohl es diese auch für C++ geben soll.

http://docs.embarcadero.c ....... n32/System_SetLength.html

Ich habe auch #include <system.hpp> eingebunden, das hat allerdings auch nicht weitergeholfen. Kann mir jemand bitte sagen was ich falsch mache. ;)
Starwing
Unregistrierter




Beitrag Starwing Unregistrierter 14:42:39 12.03.2012   Titel:              Zitieren

Ups, vergessen zu erwähnen was ich machen möchte. Ich habe eine Delphi-Komponente die folgende Variable hat.

Code:
TRegValues = array of Word;

und möchte diese jetzt in C++ nutzen:

C++:
TRegValues RegValues;
SetLength(RegValues, 100);

Das soll dann sowas sein wie TRegValues RegValues[100] nur eben dynamisch. ;)
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 1814
Beitrag DocShoe Mitglied 14:51:24 12.03.2012   Titel:              Zitieren

Nimm std::vector:

C++:
#include <vector>
 
// initialisiere v mit 100 Elementen
std::vector<TRegValues> v( 100 );

_________________
Die fünf häufigsten Anzeichen für Faulheit:
1.
Starwing
Unregistrierter




Beitrag Starwing Unregistrierter 15:07:18 12.03.2012   Titel:              Zitieren

Vielen Dank, daran dachte ich auch bereits. Die Frage die sich mir hier mehr stellt ist warum das obige nicht funktioniert. Es ist nicht das erste mal das ich Sachen probiere die laut Doku gehen sollen, aber doch nicht funktionieren. Ist die RAD Studio Doku so fehlerhaft oder mache ich da was falsch?
akari
Moderator

Benutzerprofil
Anmeldungsdatum: 27.11.2004
Beiträge: 11305
Beitrag akari Moderator 15:53:11 12.03.2012   Titel:              Zitieren

Hallo

Das ist eben eine Delphi-spezifische Implementation von dynamischen Arrays, das kannst du nicht direkt in C++ Syntax umschreiben. In C++ werden dynamische Arrays anders verwendet, DocShoe hat ja schon die im allgemeinen beste Variante gezeigt.

Es ist wie beim Übersetzen von Deutsch nach Englisch : Nicht die einzelnen Wörter übersetzen, sondern den Sinn verstehen und übertragen.

bis bald
akari

_________________
In der nächsten Version wird alles besser!
Starwing
Unregistrierter




Beitrag Starwing Unregistrierter 17:51:51 12.03.2012   Titel:              Zitieren

Dem möchte ich jetzt nicht so wirklich zustimmen. IntToStr() ist auch nichts von C++, sondern Delphi und kann man im C++Builder verwenden. Zumal in der Doku es so präsentiert wird, als ob es für den C++Builder ebenfalls gilt:
Zitat:
Pascal
procedure SetLength(var S; NewLength: Integer);
C++
SetLength( S, int NewLength);

Zitat:
Pascal
function StrToInt(const S: string): Integer; overload;
C++
int StrToInt(const UnicodeString S);


Meine letzte Frage war ja nur, wie erkennt man nun was geht und was nicht, wenn es immer so dargestellt wird als könne man es verwenden. Eine ordentliche Doku hätte bei C++ dann als ein Beispiel vector verlinkt, wenn es SetLength nicht in C++Builder gibt. Oder ich missverstehe hier was. ;)
audacia
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.02.2005
Beiträge: 4140
Beitrag audacia Mitglied 18:14:34 12.03.2012   Titel:              Zitieren

Starwing schrieb:
Dem möchte ich jetzt nicht so wirklich zustimmen. IntToStr() ist auch nichts von C++, sondern Delphi und kann man im C++Builder verwenden.
Strings und dynamische Arrays sind in Delphi spracheigene Typen, in C++ allerdings Klassen. Das führt dazu, daß in Delphi externe Funktionen wie Length() und SetLength() verwendet werden, um auf die Eigenschaften von Strings oder dynamischen Arrays zuzugreifen, wohingegen man in C++ einfach Methoden (bei String) bzw. Properties (bei dynamischen Arrays) dafür definiert hat:
C++:
String s;
s.SetLength (s.Length () + 2);
 
DynamicArray<int> a;
a.Length = a.Length + 2;



Starwing schrieb:
Zumal in der Doku es so präsentiert wird, als ob es für den C++Builder ebenfalls gilt:
Das ist ein Fehler in der 2009er-Dokumentation. Die aktuelle Dokumentation macht das richtig:
System.SetLength (Delphi) / System.DynamicArray.Length (C++)


Starwing schrieb:
Meine letzte Frage war ja nur, wie erkennt man nun was geht und was nicht, wenn es immer so dargestellt wird als könne man es verwenden.
Nur in die aktuelle Doku schauen ;)


Starwing schrieb:
Eine ordentliche Doku hätte bei C++ dann als ein Beispiel vector verlinkt, wenn es SetLength nicht in C++Builder gibt.
std::vector<> ist natürlich die bessere Option, wenn du nur C++-Code schreibst, aber wenn du mit Delphi-Komponenten zu tun hast, die dynamische Arrays oder Strings verwenden, kannst du mit std::vector<> natürlich nichts anfangen, weil es dazu inkompatibel ist. So ein Verweis wäre also nicht hilfreich.

_________________
"Hey, it compiles! Ship it!"
C++Builder Pages · Typsichere Format-Strings
c++.de :: VCL (C++ Builder) ::  Frage zu SetLength   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.