#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:
Вы хотите инициализировать переменную (массив структурных переменных) внутри класса?
Если класс был написан вами, есть много способов сделать это.
- Самостоятельно напишите конструктор по умолчанию для класса.
- Напишите параметризованный конструктор для класса, который принимает «массив структуры» в качестве аргумента.
Ответ №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;
};