| Autor |
Nachricht |
Starwing
Unregistrierter
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
|
 |
|
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.
|
|
|
|
|