Как создать указатель указывающий на массив и через этот указатель передать массив в функцию, возможно ли подобное?
Можно, через класс-обертку над массивом передавать в функцию указатель на класс.
Можно, через класс-обертку над массивом передавать в функцию указатель на класс.
А где будет объявлен массив внутри класса или можно объявлять обычным способом, можете показать как это будет выглядеть?
А где будет объявлен массив внутри класса или можно объявлять обычным способом, можете показать как это будет выглядеть?
Элементарно
class CArray : public Cobject // можно и не наследоваться { public: double m_Array[100]; } где-то в коде... Carray *arr = new CArray; arr.m_Array[22] = 1.23456; void GetArr(Carray *_arr)
{
double data = _arr.m_Array[22];
}
Элементарно
А для чего вы здесь используете оператор new? Можно ли по такой схеме передавать массивы в функцию разной размеренности, по сути работаем уже с указателем указывающим на указатель а не с самим массивом?
Оператор не применяется для создания массивов объектов. Я записал так
#property version "1.00" #property strict string iComments="\n class CArray : public Cobject { public: double m_Array[100]; }//дальше в OnInit() {Carray *arr = new CArray; arr.m_Array[22] = 1.23456; .... }
Ошибок мама не горюй. Может нужно расписать класс?
А для чего вы здесь используете оператор new? Можно ли по такой схеме передавать массивы в функцию разной размеренности, по сути работаем уже с указателем указывающим на указатель а не с самим массивом?
new, потому что это главное условие задачи - использование указателя.
С разной размерностью не получится. Уже пробовали. Шаблонная функция откомпилируется, но записать вызов функции, пр компиляции будет ошибка.
С разной размерностью не получится. Уже пробовали. Шаблонная функция откомпилируется, но записать вызов функции, пр компиляции будет ошибка.
Понятно значит тут либо использовать высокомерные массивы чтобы они были одного типа или запись в файл. В с++ это возможно там есть доступ к памяти вот пример
#include "stdafx.h" #include <conio.h> #include <iostream> using std::cout; using std::endl; using std::cin; template<typename T> void Fun(T a[],size_t m=2,size_t n=2, T r=0) { for ( size_t i = 0; i < m; i++ ) { for ( size_t j = 0; j < n; j++ ) { (a[i * n + j ])=(a[i * n + j ])*5; cout <<(a[i * n + j ])<<" "<<endl; } }cout<<endl; } int _tmain(int argc, _TCHAR* argv[]) { int mas[6]={1,2,3,4,5,6}; double mas1[2][2]={{1.4,4.2},{2.8,6.7}};//int //{{},{}}; int mas2[2][2][2]; Fun(*mas1);//Для 2умерного массива передача по ссылке, но в mql4 все массивы передаются по ссылке Fun((mas),6,1); for(int i=0;i<2;i++) {for(int t=0;t<2;t++) {cout<<mas1[i][t]<<" "<<endl;}} _getch(); return 0; }
Это всё хорошо но проблема в том что с++ не позволяет экспортировать шаблонные функции, получается нужно экспортировать каждый тип отдельно а из-за этого писать dll библиотеку не имеет никакого смысла.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования