Аргументы конструктора массива C

#c #arrays #constructor #int #arguments

#c #массивы #конструктор #int #аргументы

Вопрос:

быстрый вопрос:

Если у меня есть класс с именем something(не имеет значения), а затем, допустим, у меня есть что-то вроде

  int a[2];
 int b[2];

public:

classname(int a[], int b[]); // Constructor
  

В моем классе (частные члены), и я хочу, чтобы конструктор по умолчанию (обязательный) инициализировал эти точки (a и b). Я пытаюсь применить что-то в моем основном, например:

 int main(){

classname x({4,5},{1,10});

return 0;
 }
  

Но все, что я получаю, это сообщение об ошибке, в котором говорится, что нет подходящего конструктора. Я также пробовал использовать * вместо [] в конструкторе, но, похоже, это все равно не работает. Я просто что-то упускаю. Я пытаюсь упростить его с помощью basic C .

Спасибо.

Комментарии:

1. извините, просто пропустил это при публикации

2. Я предлагаю вам изучить std::array .

Ответ №1:

Проблема в том, что массивы не могут инициализироваться исключительно с помощью { } . Они могут быть инициализированы при выполнении этого,

 int arr[4] = {0, 1, 2, 3};
  

но только потому, что вы «сообщаете» C , какой размер имеет массив. Если вы попытаетесь сделать это в конструкторе, он потерпит неудачу, потому что он не знает, какой размер имеет ваш массив.
То, чего вы хотите достичь, может быть сделано с помощью стандартных контейнеров. Как предложил @NathanOliver, вы можете использовать std::array , но таким образом вы должны указать фиксированный размер вашего массива.

 #include <array>

class Test
{
public:
    Test(std::array<int, 4> a) {};
};

// now you can call it
Test obj1({0, 1, 2, 4});
  

Но если вы хотите сделать его более гибким и не привязанным к фиксированному размеру массива, я бы предложил использовать std::vector вместо этого.

 #include <vector>

class Test
{
public:
    Test(std::vector<int> a) {};
};

// now you can call it with as many objects as you want
Test obj1({0, 1, 2, 4, 5, 6, 7, 8});