инициализация массивов, определенных в классах

#c

#c

Вопрос:

Мое приложение включает в себя массив структурных данных. Это определено в классе. Как мне инициализировать этот массив?

 typedef struct _API_ERRORS
{
    PLX_STATUS  code; //enum
    char       *text;
} API_ERRORS;
 

В классе это определено.

 API_ERRORS Api_Errors[];
 

Могу ли я инициализировать это в конструкторе?

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

1. Массиву нужен размер, чтобы быть членом класса. Но вы std::array все равно должны предпочесть.

Ответ №1:

Вы можете объявить это следующим образом:

 typedef enum
{
    CODE1,
    CODE2,
    CODE3
} PLX_STATUS;

typedef struct _API_ERRORS
{
    PLX_STATUS  code; //enum
    char       *text;
} API_ERRORS;

API_ERRORS ApiErrors[] = 
{
    {   CODE1, "Error 1"},
    {   CODE2, "Error 2"},
    {   CODE3, "Error 3"},
};
 

Я только что добавил перечисление typedef, чтобы иметь некоторые значения для заполнения определения.

Ответ №2:

Вы хотите инициализировать переменную (массив структурных переменных) внутри класса?

Если класс был написан вами, есть много способов сделать это.

  1. Самостоятельно напишите конструктор по умолчанию для класса.
  2. Напишите параметризованный конструктор для класса, который принимает «массив структуры» в качестве аргумента.

Ответ №3:

std::vector используется в следующих двух версиях примера кода.

 // with struct constructor
class Test {
    typedef enum {PLX_1, PLX_2} PLX_STATUS;
    typedef struct _API_ERRORS
    {
        PLX_STATUS  code; //enum
        char       *text;
        _API_ERRORS(PLX_STATUS code, char* text):code(code),text(text){};
    } _API_ERRORS;
public:
    Test() {
        array.push_back(_API_ERRORS(PLX_1, "plx1"));
        array.push_back(_API_ERRORS(PLX_2, "plx2"));
    }
private:
    vector<_API_ERRORS> array;
};

// without struct constructor
class Test {
    typedef enum {PLX_1, PLX_2} PLX_STATUS;
    typedef struct _API_ERRORS
    {
        PLX_STATUS  code; //enum
        char       *text;
    } _API_ERRORS;
public:
    Test() {
        array.push_back({PLX_1, "plx1"});
        array.push_back({PLX_2, "plx2"});
    }
private:
    vector<_API_ERRORS> array;
};