Скачать MetaTrader 5

Не изменяется переменная, переданная в функцию в качестве параметра

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Igor
18
Igor  

Ув. Коллеги!

void SetInt(int Param) {

Param = 7;
return;
}

int start() {
int V = 4;
Print(V);
SetInt(V);
Print(V);

}

По моему - должно выводить сначала 4 потом 7

Но - по факту - установка значения 7 переменной V не происходит в SetInt(int Param). Почему?

Что я не так делаю?

Заранее благодарен за ответ

Artyom Trishkin
Модератор
85939
Artyom Trishkin  
IgorKiev:

По моему - должно выводить сначала 4 потом 7

Но - по факту - установка значения 7 переменной V не происходит в SetInt(int Param). Почему?

Что я не так делаю?

Заранее благодарен за ответ

Тип void ничего не возвращает.

//---
int SetInt(int Param) {
   Param = 7;
   return(Param);
}
//---

либо

//---
void SetInt(int &Param) {
   Param = 7;
   return;
}
//---
Igor
18
Igor  

А мне м не нужно, чтобы функция что-то возвращала.

Мне нужно, чтобы она первому параметру присваивала определенное значение. Или например нескольким параметрам определенные значения

void SetIntString(int ParamInt, string ParamString) {
   ParamInt = 7;
   ParamString = "ABCD";
   return;
} 
Igor
18
Igor  
artmedia70:

Тип void ничего не возвращает.

либо


А вот вариант

void SetInt(int &Param) {
   Param = 7;
   return;
}

- то что нужно!

Выходит что дело в амперсанте.

Спасибо Вам, добрый человек.

П.С. а где это можно прочесть в документации?

Igor
18
Igor  

И вот еще что....

Это работает только в функциях определенных в текущем модуле?

Проверял во внешних библиотеках - не работает. Так и должно быть или ошибся?

khorosh
9847
khorosh  
IgorKiev:

Ув. Коллеги!

void SetInt(int Param) {

Param = 7;
return;
}

int start() {
int V = 4;
Print(V);
SetInt(V);
Print(V);

}

По моему - должно выводить сначала 4 потом 7

Но - по факту - установка значения 7 переменной V не происходит в SetInt(int Param). Почему?

Что я не так делаю?

Заранее благодарен за ответ


Чтобы выполнилось то, что вы хотите нужно переменную Param объявить, как глобальную, т.е. вне функции SetInt() и вне функции start().
Алексей Тарабанов
7331
Алексей Тарабанов  
..., либо передать ее, как ссылку.
Artyom Trishkin
Модератор
85939
Artyom Trishkin  
IgorKiev:


А вот вариант

- то что нужно!

Выходит что дело в амперсанте.

Спасибо Вам, добрый человек.

П.С. а где это можно прочесть в документации?

Поищите "Передача параметров по ссылке"
khorosh
9847
khorosh  
tara:
..., либо передать ее, как ссылку.
Этот вариант уже был предложен выше.
Igor
18
Igor  

Существует возможность передавать параметры по ссылке. В этом случае модификация таких параметров отразится на соответствующих переменных в вызываемой функции, переданных по ссылке.

Параметры по ссылке можно передавать только в пределах одного модуля, для библиотечных функций такая возможность не предусмотрена.

Вопрос снят. Хотя... ИМХО это некая "недоразвитость" языка mql4

Алексей Тарабанов
7331
Алексей Тарабанов  
khorosh:
Этот вариант уже был предложен выше.
Да, я медленно пишу буквы, но глобальную переменную передавать в функцию через список параметров не готов.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий