Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Delphi in C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.05.2017, 16:30 Uhr
berolld



Hallo an alle,

ich wollte etwas schreiben und komme gerade nicht weiter.
Folgendes Problem:

Ich habe einen Delphi Code welchen ich in Youtube gesehen habe, und möchte diesen in c++ umschreiben:

var
BreiteFeld : TField;
LaengeFeld : TField;
...

begin
.....
begin
BreiteFeld := FDMemTableGrad.FieldByName('Breite');
LaengeFeld := FDMemTableGrad.FieldByName('Laenge');
FDMemTableGrad.First;

Wie schreibe ich das in C++ um?
Mein Ansatz war:

C++:
TField BreiteFeld = new TField();
TField LaengeFeld = new TField();

BreiteFeld = FDMemTableGrad.FieldByName("Breite");
LaengeFeld = FDMemTableGrad.FieldByName("Laenge");
...



Bin für jede Hilfe dankbar!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.05.2017, 21:34 Uhr
Hans
Library Walker
(Operator)


Hi,

wenn Du nur einen Ausschnitt aus dem Code hast, wird das Unternehmen erfolglos bleiben, weil Dir Teile fehlen.

Ansonsten müsste in dem Code irgendwo sowas wie

Code:
TYPE TField : [i]datentyp[/i];


zu finden sein, was in C++ durch eine entsprechende typedef-deklaration zu ersetzen wäre.


Code:
FDMemTableGrad.FieldByName("Breite");

Wenn es das ist, wofür ich es halte, müsste es sich um einen Funktionsaufruf einer Elementfunktion einer Klasse handeln. Funktionen, die Teil einer Klasse sind, werden in Pascal meisst als "Methoden" bezeichnet. (Pascal ist ja die eigentliche Programmiersprache von Delphi; Delphi selbst ist ja "nur" die GUI und das drumherum.)

Wenn diese Definitionen aus einer Unit stammen, brauchst Du entweder deren Quellcode oder eine übersetzte Version davon. Units in Pascal entsprechen den Modulen die in C/C++ mittels #include eingebunden werden. In C/C++ braucht man neben der include-Datei für den Compiler noch eine lib-Datei für den Linker. In Pascal braucht man entweder die übersetzte Unit-Datei (zu Turbo-Pascal-Zeiten hatten die die Endung "TPU"; - keine Ahnung, ob das immer noch so ist.) oder den Quelltext der Unit. Das Statement zum einbinden von Units lautet "uses" und steht immer am Anfang eines Programms, also etwa:

Code:
program xyz;

uses crt, weitere_Unit_1, weitere_Unit_2;



Für weitere Infos fragst Du die Suchmaschiene Deines Vertrauens nach einer Übersicht über die Gemeinsamkeiten und Unterschiede zwischen Object-Pascal (wie der Pascaldialekt von Delphi genau heisst) und C++.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.05.2017, 00:11 Uhr
berolld



Hallo Hans,

warum ich gerade das Beispiel genommen habe hängt damit zusammen, dass ich was ähnliches wie in dem Tielcode welchen ich oben reingestellt habe machen möchte.

Ich habe bei meinem Code folgendes:

C++:

//beide Vectoren in der h-Datei deklariert, diese werden mit Gleitkommazahlen gefüllt
breite.push_back(bb);  
laenge.push_back(ll);  

TMapCoordinate myCoordinate = TMapCoordinate::Create(breite, laenge);  
MapView1->Location = myCoordinate;
MapView1->Zoom = 16;
TMapMarkerDescriptor Marker = TMapMarkerDescriptor::Create(myCoordinate, "Koordinate");
Marker.Visible =  true;
Marker.Draggable = false;
String beschreibung = "Koordinate";;

Marker.Snippet = beschreibung;
FMarkers->Insert(0, MapView1->AddMarker(Marker));




Ich würde jetzt gerne mehrere Marker auf die Karte setzen, wobei
C++:
myCoordinate
sich immer verändern soll, indem es sich immer wieder den nächsten breite und laenge Wert holt.

Ich habe es schon mit einer for-Schleife und mit einer while-Schleife probiert jedoch ohne erfolg.

Hoffe du hast einen Ansatz für mich...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.05.2017, 10:07 Uhr
ao

(Operator)



Zitat:
Ich habe es schon mit einer for-Schleife und mit einer while-Schleife probiert jedoch ohne erfolg.

Was hast du probiert, und was heißt "erfolglos"? Compilerfehler? Laufzeitfehler? Leute, ihr müsst schon ein bisschen mehr verraten als "geht nich, mach mal".


C++:
TMapCoordinate myCoordinate = TMapCoordinate::Create(breite, laenge);


Ich schätze, dass das hier schon nicht geht, weil breite und laenge Vektoren sind und Create keine Überladung hat, in die man zwei Vektoren reinstecken kann. Du musst (wie schon erkannt) in einer Schleife über die Vektoren laufen und bei jedem Durchlauf EINE Breite und EINE Länge herausholen und in Create reinstecken.

Du erkennst vielleicht, dass die Namen "breite" und "laenge" schlecht gewählt sind, weil sie dich auf den falschen Gedanken gebracht haben, du könntest sie direkt in Create verwenden. Du solltest besser Namen wählen, die zum Ausdruck bringen, dass es sich um Container handelt, die viele Breiten- und Längengrade enthalten.

Dieser Post wurde am 10.05.2017 um 10:08 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.05.2017, 15:59 Uhr
berolld



Ich hatte es so versucht:

C++:
void __fastcall TForm4::AnzeigenClick(TObject *Sender)
{

            TJSONObject* o =(ClientModule2->ServerMethods1Client->GetGrad());
   __try {
    TJSONArray *a = (TJSONArray*) o->Get("locations")->JsonValue;
    for (int idx = 0; idx < a->Size(); idx++) {
      TJSONObject *aLocation = (TJSONObject*) a->Get(idx);
          
      String b = aLocation->Values["Breite"]->Value();
      double bb = b.ToDouble();
      String l= aLocation->Values["Laenge"]->Value();
      double ll = l.ToDouble();
      String c= aLocation->Values["Beschreibung"]->Value();
    
        vBreite.push_back(bb);
        vLaenge.push_back(ll);
        DynamicArray<TMapCoordinate> aMapCenter;
        aMapCenter.Length = vBreite.size();
        DynamicArray<TMapMarkerDescriptor> Marker;
        Marker.Length = vBreite.size();
        for(int x = 0; x <= vBreite.size(); x++){
        
        //TMapCoordinate mapCenter = TMapCoordinate::Create(bb,ll);
         aMapCenter[x]=TMapCoordinate::Create(vBreite[x], VLaenge[x]);
        
        MapView1->Location = aMapCenter[x];
        MapView1->Zoom = 10;
        Marker[x] = TMapMarkerDescriptor::Create(aMapCenter[x], "Koordinate");
        //TMapMarkerDescriptor Marker =  TMapMarkerDescriptor::Create(aMapCenter[x], "Koordinate");
        Marker[x].Visible =  true;
        Marker[x].Draggable = false;
        String beschreibung = c;
        //Marker.Title = title;
        Marker[x].Snippet = beschreibung;
        FMarkers->Insert(0, MapView1->AddMarker(Marker[x]));
        }
        
      
    }
  }
  __finally {
    o->Free();
    FMarkers->Clear();    
  }
}



Den Fehler erhalte in in der Anwendung auf meinem Handy, sobald ich den Button drücke, wird mir ein Marker gezeigt und dan die Fehlermeldung:

"Zugriffsverletzung bei Adresse 9F5278D4 beim Zugriff auf Adresse 0000000C".

Dieser Post wurde am 10.05.2017 um 16:00 Uhr von berolld editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.05.2017, 11:23 Uhr
ao

(Operator)


Dann probier mal hier:

C++:
for(int x = 0; x <= vBreite.size(); x++)

nicht

C++:
x <= vBreite.size()

sondern

C++:
x < vBreite.size()


Mit <= läufst du um 1 zu weit.


Außerdem: Ist das wirklich richtig, in der Schleife über alle Locations nochmal eine Schleife über alle Breiten zu machen? Zumal ja das Breiten-Array mit jeder Location um 1 wächst.

Mit dieser Schachtelschleife erzeugst du die meisten Marker mehrfach.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.05.2017, 19:41 Uhr
berolld



Danke für die Hilfe hat funktioiert, habe den Fehler gefunden...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: