Перейти к содержимому

Как передать массив в конструктор c

  • автор:

Как передать массив в конструктор c

Конструкторы называются по названию типа, а назвать тип struct вам вряд ли дадут.
И вообще, что это? Объявление конструктора или его вызов? Если первое, то это ваше дело просить ссылку или по значению фигачить. Ессли второе, то см. мой пост.

Пользователь
Регистрация: 30.01.2016
Сообщений: 34

я в функции main() заполняю массив и мне надо его передать в конструктор класса. это объявление.
на счет названия, да, знаю, что пришло в голову, то и написал

Последний раз редактировалось NIKITAY; 30.12.2018 в 02:02 .
Регистрация: 15.02.2010
Сообщений: 15,654

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передать двумерный массив Variant из VBA в dll C++, передать двумерный массив Variant из VBA в dll C++ и вернуть их после обработки обратно в VBA. maxPo Microsoft Office Excel 0 24.11.2017 17:29
Надо передать в функцию массив байт, как массив dword-ов. Kuzya69 Общие вопросы Delphi 7 30.07.2016 01:27
Передать массив в функцию Костян Пират JavaScript, Ajax 5 06.05.2015 09:03
Двумерный массив, конструктор копирования vladxxl Общие вопросы C/C++ 1 27.03.2011 15:14
Конструктор, двумерный динам массив ammaximus Общие вопросы C/C++ 7 08.02.2009 19:28

Как передать массив в конструктор класса?

Мне нужно считать элементы массива в конструкторе класса SegmentTree, следовательно необходимо как-то передать туда массив.
Код ниже выводит ошибку Types ‘SegmentTree’ and ‘SegmentTree *’ are not compatible
Что мне нужно сделать, чтобы все сработало?

#include #include #include using namespace std; class SegmentTree < private: int tree[]; public: SegmentTree(int array[], int length)< int size = (1 >; int main(int argc, const char * argv[]) < // insert code here. int n; cin >> n; int a[n]; for (int i = 0; i < n; ++i) cin >> a[i]; SegmentTree tree = new SegmentTree(a, n); >
  • Вопрос задан более двух лет назад
  • 370 просмотров

Комментировать
Решения вопроса 1
Wataru @wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.

Читайте ошибку внимательно. Дело не в массиве.

Вместо SegmentTree tree = new SegmentTree(a, n);
надо
SegmentTree tree(a, n); или SegmentTree *tree = new SegmentTree(a, n);

new — создает указатель. Инициализировать им нужно, соответственно, указатель.

Arduino.ru

Передача массива ссылок на строки в конструктор класса

  • Войдите на сайт для отправки комментариев

Ср, 25/10/2017 — 14:19
LexaArduinschik
Зарегистрирован: 25.10.2017
Добрый день!
Имеется массив ссылок на строки. необходимый для того чтобы хранить во flash памяти

char string_1[] PROGMEM = "String 1"; char string_2[] PROGMEM = "String 2"; char string_3[] PROGMEM = "String 3"; char string_4[] PROGMEM = "String 4"; char string_5[] PROGMEM = "String 5"; const char* string_table[] PROGMEM =;

Подскажите как передать ссылки на массив string_table в конструктор класса чтобы внутри класса была возможность получить доступ к этим строкам.

Пробовал множество вариантов, но работоспособного варианта не нашел.
Класс выглядит примерно так:

class test1< public: test1(char *strTab[]); private: char *_pStrTab; >; test1::test(char *strTab[])< _pStrTab = strTab; >; test1 obj (string_table);
  • Войдите на сайт для отправки комментариев

Ср, 25/10/2017 — 14:29
Зарегистрирован: 21.09.2017

видимо ты невнимательно читал про использование PROGMEM

про memcpy_P слышал?

  • Войдите на сайт для отправки комментариев

Ср, 25/10/2017 — 15:45

ЕвгенийП аватар

Зарегистрирован: 25.05.2015
LexaArduinschik пишет:

Имеется массив ссылок на строки. необходимый для того чтобы хранить во flash памяти

char string_1[] PROGMEM = "String 1"; char string_2[] PROGMEM = "String 2"; char string_3[] PROGMEM = "String 3"; char string_4[] PROGMEM = "String 4"; char string_5[] PROGMEM = "String 5"; const char* string_table[] PROGMEM =;

Странно он (массив) у Вас описан. Неужели компилируется? Чем, интересно — что за IDE у Вас?

Я бы описал его так:

const char string_1[] PROGMEM = "String 1"; const char string_2[] PROGMEM = "String 2"; const char string_3[] PROGMEM = "String 3"; const char string_4[] PROGMEM = "String 4"; const char string_5[] PROGMEM = "String 5"; const char * const string_table[] PROGMEM =;

А передавать конструктору, так Вы описывайте параметр конструктора как положено — а именно точно так, как описана переменная, которую Вы собраись передавать. И будет Вам счастье.

Вот это пример печатает «String4» — вполне правильно по-моему

const char string_1[] PROGMEM = "String 1"; const char string_2[] PROGMEM = "String 2"; const char string_3[] PROGMEM = "String 3"; const char string_4[] PROGMEM = "String 4"; const char string_5[] PROGMEM = "String 5"; const char * const string_table[] PROGMEM =; class Kaka < public: Kaka(const char * const * s PROGMEM) < memcpy_P(buff, s[3], 9); >char buff[20]; > kaka(string_table); void setup(void) < Serial.begin(115200); Serial.println(kaka.buff); >void loop(void) <>
  • Войдите на сайт для отправки комментариев

Как передать массив в конструктор c

У меня есть класс, который обозначает некий прогноз.

Class Yprognose < public Yprognose(double arVal):m_arVal(arVal) <> . protected: double m_arVal; >

Создавая его объект, передаю значение double. Вопрос – как передать туда массив?
То есть – как правильно синтаксически – передать заполненный массив в класс. Как передать массив в виде аргумента конструктора? Нужно ли этот массив создавать в конструкторе класса именно в жтой ситуации? Что вообще надо сделать в конструкторе при наличии массива среди переменных класса?

F() < Carray * aaa=new leftClass(); For(int I=1;1 <=12;1++) < aaa.Add(i); >Yprognose Prog(&aaa); >

Возможно вопром мтоит гнилых помидоров, но прошу ими не кидать в меня — просто мне нужен пример ПРАВИЛЬНОГО кода!вопрос чести

Безвыходных ситуаций не бывает!(Правило Кирхгофа)
Re: конструктор с переменной-массивом

От: Аноним
Дата: 29.08.03 13:38
Оценка:

Здравствуйте, altmenn, Вы писали:

A> Создавая его объект, передаю значение double. Вопрос – как передать туда массив?

Никак.

A>Возможно вопром мтоит гнилых помидоров, но прошу ими не кидать в меня — просто мне нужен пример ПРАВИЛЬНОГО кода!

#include templatetypename T> class foo < public: foo(const std::vector& bar) : bar(bar) <> private: std::vector bar; >; int main() < std::vectordouble> baz(10); foodouble> qux(baz); >

Re: конструктор с переменной-массивом

От: Sergey
Дата: 29.08.03 13:59
Оценка:

Hello, altmenn!
You wrote on Fri, 29 Aug 2003 13:19:10 GMT:

a> У меня есть класс, который обозначает некий прогноз.

a>

 a> Class Yprognose a> < a>public a> Yprognose(double arVal):m_arVal(arVal) <> a> . a> protected: a> double m_arVal; a> > a>

a> Создавая его объект, передаю значение double. Вопрос – как передать
a> туда массив?

Массив — никак. Можно передать ссылку на массив или указатель на первый элемент.

a> То есть – как правильно синтаксически – передать
a> заполненный массив в класс. Как передать массив в виде аргумента
a> конструктора?

a> Нужно ли этот массив создавать в конструкторе класса
a> именно в жтой ситуации?

Он сам создастся. Нужно ли тебе его инициалировать — тебе виднее.

a> Что вообще надо сделать в конструкторе при
a> наличии массива среди переменных класса?

Зависит от того, что тебе надо.

Best regards,
Sergey.

Posted via RSDN NNTP Server 1.7 beta
Одним из 33 полных кавалеров ордена «За заслуги перед Отечеством» является Геннадий Хазанов.
Re[2]: конструктор с переменной-массивом

От: altmenn DLR IPA
Дата: 29.08.03 14:04
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, altmenn, Вы писали:

A>> Создавая его объект, передаю значение double. Вопрос – как передать туда массив?

А>Никак.

A>>Возможно вопром мтоит гнилых помидоров, но прошу ими не кидать в меня — просто мне нужен пример ПРАВИЛЬНОГО кода!
А>

А>#include А>templatetypename T> А>class foo А>< А>public: А> foo(const std::vector& bar) : bar(bar) <> А>private: А> std::vector bar; А>>; А>int main() А> < А>std::vectordouble> baz(10); А> foodouble> qux(baz); А>> А>

Спасибо! А то, что Вы знаете stl мне очень помогло

Безвыходных ситуаций не бывает!(Правило Кирхгофа)
Re[2]: конструктор с переменной-массивом

От: altmenn DLR IPA
Дата: 29.08.03 14:08
Оценка:

Вопрос еще. Вы отвечаете:
a>> Нужно ли этот массив создавать в конструкторе класса
a>> именно в этой ситуации?

S>Он сам создастся. Нужно ли тебе его инициалировать — тебе виднее.

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

Безвыходных ситуаций не бывает!(Правило Кирхгофа)
Re[3]: конструктор с переменной-массивом

От: Sergey
Дата: 29.08.03 14:12
Оценка:

Hello, altmenn!
You wrote on Fri, 29 Aug 2003 14:08:45 GMT:

a> Вопрос еще. Вы отвечаете:
a>>> Нужно ли этот массив создавать в конструкторе класса
a>>> именно в этой ситуации?

S>> Он сам создастся. Нужно ли тебе его инициалировать — тебе виднее.

a> В принципе мне и надо выяснить — в каком случае необходима
a> инициализация. Если класс принимает при использовании заполненный
a> массив, то его не надо ни создавать ни инициализировать — правильно я
a> поняла?

Если тебе нужен заполненный массив, придется его заполнять самостоятельно. Синтаксиса для присваивания массивов, насколько мне известно, не существует.

Best regards,
Sergey.

Posted via RSDN NNTP Server 1.7 beta
Одним из 33 полных кавалеров ордена «За заслуги перед Отечеством» является Геннадий Хазанов.
Re: конструктор с переменной-массивом

От: Анатолий Широков
Дата: 29.08.03 14:31
Оценка:

Можно без копирования — передать и сразу же обработать:

// прогноз class forecast < public: forecast(const double ptr[], size_t size) : data_(ptr), size_(size) < >public: double result() const < for(int i = 0; i// use data_[i].. > private: const double* data_; size_t size_; >; int main() < double arr[10]; // fill array . double r = forecast(arr, sizeof(arr)/sizeof(arr[0])).result(); >

Re: конструктор с переменной-массивом

От: LaptevVV
Дата: 29.08.03 14:36
Оценка:

Здравствуйте, altmenn, Вы писали:

A>У меня есть класс, который обозначает некий прогноз.

A>

A>Class Yprognose A>< A>public A>Yprognose(double arVal):m_arVal(arVal) <> A>. A>protected: A>double m_arVal; A>> A>

A> Создавая его объект, передаю значение double. Вопрос – как передать туда массив?
A>То есть – как правильно синтаксически – передать заполненный массив в класс. Как передать массив в виде аргумента конструктора? Нужно ли этот массив создавать в конструкторе класса именно в жтой ситуации? Что вообще надо сделать в конструкторе при наличии массива среди переменных класса?

В тот класс, который написан — никак. Вы можете определить класс прямо с массивом в качестве члена — тогда надо длину проставлять. У Вас в этом случае должен быть конструктор, с аргументом-указателем (имя массива — указатель) и длиной массива.
Далее, вы можете в программе создавать любым способом массив того типа, что у Вас в в классе в качестве поля, заполнять его и вызывать конструктор, прописывая в аргументах этот заполненный массив.
Вариант с длиной массива — указать ее как параметр шаблона. Тогда ваш класс с массивом — шаблон.
Второй путь — прописать в классе указатель. Тогда в конструкторе надо будет выделять память. Сколько — может быть параметром конструктора. Заполнять такой объект придется отдельно.
Можно перегрузить конструктор и параметрами опять прописать указатель и длину. Тогда конструктор выделяет память по аргументу-длине и заполняет из передаваемого массива.

Хочешь быть счастливым — будь им!
Без булдырабыз.
Re[3]: конструктор с переменной-массивом

От: Аноним
Дата: 29.08.03 14:41
Оценка:

Здравствуйте, altmenn, Вы писали:

A>Спасибо! А то, что Вы знаете stl мне очень помогло

Нет, ну если уж Вы так не любите STL, можно обойтись, конечно.

#include templatetypename T, std::size_t N> class foo < public: foo(const boost::array& bar) : bar(bar) <> private: boost::array bar; >; int main() < boost::arraydouble, 10> baz = <>; foodouble, 10> qux(baz); >

Re[2]: конструктор с переменной-массивом

От: LaptevVV
Дата: 29.08.03 14:47
Оценка:

Анатолий Широков уже прописал вариант.
Но я еще подскажу.
Если количество данных невелико, то можно определить конструктор с переменным числом параметров. Тогда конструктор считает параметры и резервирует столько памяти, сколько параметров.
Естественно, не забудьте, что деструктор должен всю затребованную память возвращать.

Хочешь быть счастливым — будь им!
Без булдырабыз.
Re[3]: конструктор с переменной-массивом

От: Анатолий Широков
Дата: 29.08.03 14:56
Оценка:

Здравствуйте, LaptevVV, Вы писали:

LVV>Анатолий Широков уже прописал вариант.
LVV>Но я еще подскажу.
LVV>Если количество данных невелико, то можно определить конструктор с переменным числом параметров. Тогда конструктор считает параметры и резервирует столько памяти, сколько параметров.
LVV>Естественно, не забудьте, что деструктор должен всю затребованную память возвращать.

Я не стал бы ради передачи массива переменной длины корячиться с эллипсом (. ) — это слишком.

Re[4]: конструктор с переменной-массивом

От: skyline
Дата: 01.09.03 06:48
Оценка:

Здравствуйте, Sergey

S>Синтаксиса для присваивания массивов, насколько мне известно, не существует.

Если заменить твой массив на boost::array, то будет синтаксис присваивания.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *