C++ funktion mit pointern aufrufen

honky-tonk

Commodore Pro
🎅Rätsel-Elite ’24
Registriert
Feb. 2009
Beiträge
4.622
Hey,
bin C++ neuling und brauche mal eure Hilfe!

ich habe in meiner Funktion folgende Elemente:

const int size_x=4;
const int size_y=4;
const int size_z=4;
int vc[verticalChannelsPerLayer];
int totalVC=verticalChannelsPerLayer*size_z;
int trp[5][3];
int trp_size=5;
int routing=1;

und will die funktion aufrufen, wie sie in einer anderen Klasse im Header deklariert wurde:

double* Eva(int X, int Y, int Z, int* vc, int vc_size, int** trp, int traffic_size, int routing_type);

mein Ansatz war:
double erg=Eva(size_x,size_y,size_z,&vc,totalVC,&trp,trp_size,routing);


...da wirft er mir aber n fehler:
no matching function for call to 'Evaluation::Eva(const int&, const int&, const int&, int [16], int&, int [(((unsigned int)<anonymous>) + 1)][3], int&, int&)'

kann mir bitte jemand aus diesem pointer Dschungel helfen??
dass wenn da f(int* a) definiert ist dass man f(&b) aufrufen muss is mir bewusst aber bei int** ????

Vielen Dank!
Grüße!
 
Zuletzt bearbeitet:
honky-tonk schrieb:
double* Eva(int X, int Y, int Z, int* vc, int vc_size, int** trp, int traffic_size, int routing_type);
double erg=Eva(size_x,size_y,size_z,&vc,totalVC,&trp,trp_size,routing);
Grüße!

Die Methode Eva liefert einen double-pointer zurück, dein Aufruf erwartet aber einen double-Wert.
 
ok ich habe versucht double erg in double* erg zu ändern und alternativ ein &Eva probiert, der fehler bleibt bestehen :-(

ich vermute dass die übergabeparameter nicht stimmen, weiß aber nicht wies richtig aussehen müsste

weitere ideen?
 
Hast du denn irgendeine Dokumentation zur der Klasse?

Weil

Code:
int trp[5][3];

lässt sich nicht in int** konvertieren, da bei der Übergabe von Feldern in C++ immer die Größe aller Dimensionen außer der ersten bekannt sein muss, das hat damit zu tun, wie C++ Felder im Speicher anlegt. "trp" könntest du nur an einen Parameter mit der Deklaration

Code:
void foo(int  (*trp)[3])

übergeben...

Alternativ sollte das funktionieren:

Code:
int** trp;

trp = new int*[5];

for(int ii=0; ii<3; ii++)
   trp[ii] = new int[3];

Grüße

Brainfart...
 
Zuletzt bearbeitet:
hey,
daran liegts tatsächlich.
ich will/muss der funktion also ein 2D Array übergeben dazu das int**.

der funktion wird übrigens nach trp die größe der ersten dimmension des Arrays übergeben.

Die funktion sollte schon so bleiben wie sie ist, nur evtl den Aufruf ändern.

ich verstehe nicht was dein code macht? kannst du das bitte erklären?

ok der untere code scheint zu funktionieren...verstehe ihn zwar immer noch nicht wirklich aber hauptsache es läuft

DANKE
 
Zuletzt bearbeitet:
Zurück
Oben