#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});