Как передать массивы в качестве параметров в конструкторе? С++

Вопрос:Я пытаюсь создать конструктор для вызова класса, в котором в качестве параметров передаются 4 массива. Я пробовал использовать *,& и сам массив; однако, когда я присваиваю значения в параметрах переменным в классе, я получаю эту ошибку: call.cpp: In constructor ‘call::call(int*, int*, char*, char*)’: call.cpp:4:15: error: incompatible types in assignment of ‘int*’ to ‘int [8]’ call.cpp:5:16:

Вопрос:

Я пытаюсь создать конструктор для вызова класса, в котором в качестве параметров передаются 4 массива. Я пробовал использовать *,& и сам массив; однако, когда я присваиваю значения в параметрах переменным в классе, я получаю эту ошибку:

call.cpp: In constructor ‘call::call(int*, int*, char*, char*)’: call.cpp:4:15: error: incompatible types in assignment of ‘int*’ to ‘int [8]’ call.cpp:5:16: error: incompatible types in assignment of ‘int*’ to ‘int [8]’ call.cpp:6:16: error: incompatible types in assignment of ‘char*’ to ‘char [14]’ call.cpp:7:16: error: incompatible types in assignment of ‘char*’ to ‘char [14]’

Я был бы признателен за вашу помощь в поиске моей ошибки и помог бы мне ее исправить.
вот мой код:

.h файл

#ifndef call_h #define call_h class call{ private: int FROMNU[8]; int DESTNUM[8]; char INITIME[14]; char ENDTIME[14]; public: call(int *,int *,char *,char *); }; #endif

.cpp file

call:: call(int FROMNU[8],int DESTNUM[8],char INITIME[14],char ENDTIME[14]){ this->FROMNU=FROMNU; this->DESTNUM=DESTNUM; this->INITIME=INITIME; this->ENDTIME=ENDTIME; } Лучший ответ:

Необработанные массивы не подлежат назначению и обычно трудно обрабатываются. Но вы можете поместить массив внутри struct и назначить или инициализировать это. По существу, что std::array.

например. вы можете сделать

typedef std::array<int, 8> num_t; typedef std::array<char, 14> time_t; class call_t { private: num_t from_; num_t dest_; time_t init_; time_t end_; public: call_t( num_t const& from, num_t const& dest, time_t const& init, time_t const& end ) : from_t( from ), dest_( dest ), init_( init ), end_( end ) {} };

Но это все еще не имеет существенной абстракции, поэтому это просто техническое решение.

Чтобы улучшить ситуацию, рассмотрите, что, например, num_t действительно есть. Это, пожалуй, номер телефона? Затем смоделируйте его как таковое.

Рассмотрим также использование стандартных контейнеров библиотеки std::vector и для массивов char, std::string.

Ответ №1

Передача необработанного массива в качестве аргумента возможна в С++.

Рассмотрим следующий код:

template<size_t array_size> void f(char (&a)[array_size]) { size_t size_of_a = sizeof(a); // size_of_a is 8 } int main() { char a[8]; f(a); } Ответ №2

В C/С++ вы не можете назначать массивы, выполняя this->FROMNU=FROMNU;, таким образом, ваш метод не будет работать и составляет половину вашей ошибки.

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

Оцените статью
Добавить комментарий