[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 198

 
Es ist ganz einfach: Verwenden Sie den WINAPI-Befehl GetPixel(), um die Farbe am Punkt 4,4 zu erfassen - dies ist die Farbe des Vordergrunds, der Rest ist nichts.
 

In einem Indikator stieß ich auf die folgende Konstruktion:

int R; //Variable wird auf globaler Ebene deklariert

Ich habe die gleiche Variable mit dem Symbol & in einer benutzerdefinierten Funktion wie folgt gefunden

void Funktion(int A, int B, int &R) {R = A*B}

Kann mir jemand sagen, warum das so gemacht wird und wo ich das im Detail nachlesen kann?

 
AndEv:

In einem Indikator stieß ich auf die folgende Konstruktion:

int R; //Variable wird auf globaler Ebene deklariert

Ich habe die gleiche Variable mit dem Symbol & in einer benutzerdefinierten Funktion wie folgt gefunden

void Funktion(int A, int B, int &R) {R = A*B}

Kann mir jemand sagen, warum das so gemacht wird und wo ich mehr darüber lesen kann?


Das Tutorial ist hier, und google rules!
 
Roman.:

Tutorial hier und google rules!


Ich verstehe nicht, was sich ändern würde, wenn es so wäre:

void Funktion(int A, int B) {R = A*B}

Die R-Variable wird global deklariert und ist innerhalb der Funktion ohnehin sichtbar. In welchen Fällen ist die Übergabe von Parametern per Referenz erforderlich?

 
AndEv:


Ich verstehe nicht, was sich ändern würde, wenn es so wäre:

void Funktion(int A, int B) {R = A*B}

Die R-Variable wird global deklariert und ist innerhalb der Funktion ohnehin sichtbar. In welchen Fällen ist die Übergabe von Parametern per Referenz erforderlich?


Lesen Sie das Lehrbuch, die Dokumentation, googeln Sie es, hier.

"Beim Aufruf der Swap-Funktion werden neue Variablen a und b erstellt und mit den Werten 3 und 5 belegt. Diese Variablen stehen in keinem Zusammenhang mit den Variablen p und q, und ihre Änderung hat keine Auswirkungen auf die Werte von p und q. Diese Methode der Parameterübergabe wird als Wertübergabe bezeichnet.

Damit eine Funktion die Werte der in anderen Funktionen deklarierten Variablen ändern kann, muss angegeben werden, dass es sich bei dem übergebenen Parameter nicht nur um einen konstanten Wert, sondern um eine Variable handelt; die Werte müssen per Verweis übergeben werden. Dazu müsste die Swap-Funktion wie folgt deklariert werden:
void swap(int & a, int & b)

Die Ampersands vor dem Variablennamen bedeuten, dass diese Variable keine lokale Variable ist, sondern ein Verweis auf die Variable, die beim Aufruf der Funktion als Parameter angegeben wird. Wenn Sie nun swap(p,q) aufrufen, sind die Variablen a und b gleichbedeutend mit den Variablen p und q, und wenn Sie ihre Werte ändern, ändern sich auch die Werte von p und q. Aber man kann eine Funktion nicht als swap(3,5) aufrufen, weil 3 und 5 Konstanten sind, und man kann Variablen nicht mit Konstanten gleichsetzen
".

 
Vinin:

Das können Sie, aber Sie müssen den EA auf Vordermann bringen

Ja, ich verstehe das :) Es ist nur so, dass man oft eine Strategie ausprobiert, eine Testversion, nur um zu sehen, wie die Idee funktioniert. Manchmal zeigen sich die Fehler dort in einem ganz anderen Licht. Und Sie haben keine Zeit zu verlieren, wenn Sie es eilig haben, etwas zu schreiben und zu sehen.

Gibt es eine Möglichkeit, ihn zu schließen, so dass er nicht kopiert, was er in die Protokolldatei schreibt? Eine Frage dazu.

 
Pyro:

Das ist verständlich:) Oft probiert man einfach eine Strategie aus, eine Testversion, nur um zu sehen, wie die Idee funktioniert. Manchmal erscheinen die Fehler in einem ganz anderen Licht. Und Sie haben keine Zeit zu verlieren, wenn Sie es eilig haben, etwas zu schreiben und zu sehen.

Gibt es eine Möglichkeit, ihn einfach zu schließen, so dass er nicht kopiert, was er in die Protokolldatei schreibt? Eine Frage dazu.



Wie können Sie einem EA vertrauen, der fehlerhaft arbeitet?
 
alsu:

Es braucht etwas anderes - die interne Variable des Programms, den Bezugspunkt für das Zeichnen des Indikators, zu ändern und dann die Linie neu zu berechnen und zu zeichnen, nachdem die Tastenkombination gedrückt wurde.

Warum will MT eigentlich keine Haken haben?


Danke für Ihr Verständnis!):
 
Es wäre wahrscheinlich einfacher, den Indikator im Prüfgerät laufen zu lassen...
Grund der Beschwerde: