Ошибка компилятора? - страница 2

 
KimIV писал (а) >>

С какой именно? Не могли бы уточнить? Вернее, меня интересует билд, в котором не надо было указывать амперсанд.

Если я не ошибаюсь, то указывать амперсанд для передачи по ссылке надо было всегда.

 
Zhunko писал (а) >>

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

Если его надо заполнять, то ссылка обязательна.

Вадим, если передается адрес то амперсенд обязателен

амперсенд - гворит о том что передается именно АДРЕС массива

--

в Си всегда надо было ставить амперсенд если вы хотели получить адрес

в MQL аналогично

а MQL по синкаксису фактически вырос из Си - тут связь прямая

---

что касаемо того что компилит без ошибок - это нормально

просто компилятору - явно надо указвать что желаем передать!

 

Я проверил код:

void start() {
  int a[]={3, 5, 8};
  func(a);
}
void func(int Arr[]) {
  Print(Arr[0]," ",Arr[1]," ",Arr[2]);
}

в билдах:

- 190 от 23.02.2006

- 200 от 14.11.2006

- 210 от 10.09.2007

- 218 от 26.08.2008

Во всех четырёх билдах данный код нормально компилируется и нормально исполняется.

 

to KimIV

этот код без возврата значения, здесь подвоха нет.
а то что я видел - ну как приснилось, но приснится то не могло, т.к. прикольно было - single возвращают как массив.
так вот - пробую как в том посте ничего не получается вглубь до 196 сборки((((

 
KimIV писал (а) >>

Я проверил код:

в билдах:

- 190 от 23.02.2006

- 200 от 14.11.2006

- 210 от 10.09.2007

- 218 от 26.08.2008

Во всех четырёх билдах данный код нормально компилируется и нормально исполняется.

А такой будет с ошибками компилироваться:

void start()
 {
  int a[3] = {3, 5, 8};
  func(a);
 }
void func (int Arr[])
 {
  Arr[0] = 1;
  Arr[1] = 2;
  Arr[2] = 3;
 }
 
Korey писал (а) >>

to KimIV

этот код без возврата значения, здесь подвоха нет.

Дело не в возврате значения, а в попытке модификации полученного значения. Амперсанд как раз и обозначает передачу параметра по ссылке, то есть в функцию передается ссылка на значение, а значит возможны манипуляции с переданным параметром. Если же амперсанд не стоит, то передается копия (фактически, константа), а не само значение.

 
Rosh писал (а) >>

Дело не в возврате значения, а в попытке модификации полученного значения. Амперсанд как раз и обозначает передачу параметра по ссылке, то есть в функцию передается ссылка на значение, а значит возможны манипуляции с переданным параметром. Если же амперсанд не стоит, то передается копия (фактически, константа), а не само значение.

это очень важный вопрос, поэтому нужно переспросить о массивах.
1 вариант - модификацию (возврат) запрещает компиллятор в порядке управления доступом к переменным разного укровня.
2.-й вариант - модификация запрещена потому что передается не ссылка а копия векторной перемнной.
т.е. во втором случае скоростьвыполнения функциирезко падает.
Какой именно вариант реализован в МQ?

 

Здравствуйте, ответте на вопрос: можно ли обрабатывать в функции n-мерные массивы? 

Например

double ex(double & m[],int k)
{for (int t=0;t<15;t++)
  if (m[t,k]>=0) m[t,k]=m[t,k]-t*2;
   else m[t,k]=m[t,k]+t*2;
}

при компиляции выдает кучу ошибок например: '>=' - wrong dimension

в случае с одномерным массивом такой проблемы нет.

 
comanche писал(а) >>

Здравствуйте, ответте на вопрос: можно ли обрабатывать в функции n-мерные массивы?

Например

при компиляции выдает кучу ошибок например: '>=' - wrong dimension

в случае с одномерным массивом такой проблемы нет.

Попробуйте так:

double ex(double & m[][],int k)
{for (int t=0;t<15;t++)
  if (m[t,k]>=0) m[t,k]=m[t,k]-t*2;
   else m[t,k]=m[t,k]+t*2;
}
 
спасибо. У меня следующий вопрос: возможно ли что бы функция работала с массивами разных измерений?
Причина обращения: