2D-Array an Funktion mit std::vector übergeben
-
Hallo Leute,
ich bin ein Neuling auf dem Gebiet C++ und habe schon meine ersten Probleme.
Ich habe in meinem Hauptprogramm (*.mql) ein 2D-Array unbestimmter Größe (string indicators[][])
Nun übergebe ich die Anfangsadresse(&) des 2D-Arrays an meine .dll (DLL_Indicators())
Die DLL sieht so aus:
#include "stdafx.h" #include "test.h" #include <string> #include <cstring> #include <mysql++.h> #include <iostream> #include <iomanip> using namespace std; struct MqlStr { char* string; int len; }; MT4_EXPFUNC void __stdcall DLL_Indicators(vector< vector<MqlStr> > & Result) { for(int = 0; i < MysqlRows; i++) { Result[i][0].string = "Indicator Name"; Result[i][1].string = "Indicator Wert"; } }Wie man sieht möchte ich dann in meiner DLL Elemente dem 2D-Array aus meine .mql hinzufügen, je nachdem wieviel Ergebnisse die Mysql findet.
Ich steh voll an, was mach ich falsch?
Danke!!
-
Ich habe keine Ahnung, was *.mql für ein Typ von ausführbarer Datei sein soll, aber ich bin mit ziemlich sicher, dass das
string indicators[][]aus Deinem Programm ein völlig anderer Typ ist, alsvector<vector<MqlStr> > &.
-
Hallo und danke,
mit folgendem Code kann ich auf das Array bearbeiten, also müsste ein Vector auf das 2D-Array auch möglich sein, oder?
MT4_EXPFUNC void __stdcall DLL_Indicators(MqlStr Result[][2]) { for(int = 0; i < MysqlRows; i++) { Result[i][0].string = "Indicator Name"; Result[i][1].string = "Indicator Wert"; } }jedoch muss ich somit die Größe des zweiten Feldes angeben, und das kann ich aber im vorhinein nicht.
Gibt es sonst vlt eine andere Lösung um die Größe des Arrays dynamisch zu ändern?
Danke
-
bitte um hilfe
-
Nach zwei Stunden musst du deinen Beitrag noch nicht pushen. Hab ein wenig Geduld.
Ich verstehe deine Fragestellung nicht ganz, aber du scheinst Arrays und die
std::vector-Klasse durcheinander zu bringen. Ein eindimensionalerstd::vectorkann zwar als dynamisches Array angeschaut werden (d.h. alle Elemente hintereinander im Speicher), aber das kannst du nicht so einfach verallgemeinern.
-
Danke,
es muss doch aber irgendwie gehen, dass ich die adresse eines zero-sized arrays demvector zuweise und mit dem vector weiterarbeite?
oder lieg ich da falsch?
-
tomplank schrieb:
es muss doch aber irgendwie gehen, dass ich die adresse eines zero-sized arrays demvector zuweise und mit dem vector weiterarbeite?
Automatisch geht das nicht, da mußt du schon von Hand die einzelnen Zeilen des Arrays in den vector<> reinbeamen. Die Größe mußt du entweder direkt setzen (im Construktor oder per resize()) oder du verwendest push_back() oder insert() zum Füllen.
-
Danke, aber wenn ich ein zero sized array an die funktion übergebe, habe ich ja nichts um den vector zu füllen.
Mein ziel ist es die Mysql ergebnisse in einem vector zu speichern und diesen dann per call-by-reference an mein bislang zero sized array zurückzugeben
-
Was soll denn ein "zero sized array" überhaupt sein? In C++ haben Arrays grundsätzlich eine feste Größe, die dem Compiler auch bekannt ist (können aber in den meisten Fällen auch implizit in einen Zeiger umgewandelt werden). Arrays mit zur Laufzeit festgelegter Größe (VLA) gibt es nur unter C99 (und selbst da bin ich nicht sicher, ob es auch für mehrdimensionale Arrays funktioniert).
PS: Und was die Herkunft der Daten angeht, da hängt es von der SQL-Library ab, was unterstützt bzw. zurückgegeben wird. Wenn es eine C-basierte Library ist, hast du vermutlich mehrdimensionale char*-Arrays in der Hand.