ошибка C2131: выражение не оценивается как константа при создании массива структуры - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь создать массив структуры. Метод, который я использовал для создания массива структуры, которая работала нормально в Linux и Ma c, но это выдает ошибку в windows

uint32_t size;
Test TestArray[size];
TestArray[i] = Test;
//i

Ошибка, которую я получаю в windows

error C2131: expression did not evaluate to a constant 

Я также пытался

typedef struct Test {
    char *x;
    char *y;
} Test;

uint32_t size;
status = napi_get_array_length(env,args[2],&size);
assert(status == napi_ok);

struct Test  testList[size];
napi_value SharePrefixObject;
for(uint32_t i=0;i<size;i++){
Test t;
testList[i]= t;

Вопрос Как разрешить вышеуказанную ошибку?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

В C ++ нет массивов переменной длины. C ++ способ сделать это - использовать вектор.

Ваш код очень похож на C. То, как вы объявляете структуры, выглядит как C. То, как вы используете указатели, идиоматически похоже на C. В любом случае, если вы хотите сделать правильное программирование на C ++, сделайте это

#include <vector>

std::vector<Test> testList(size);
0 голосов
/ 08 апреля 2020

Вам необходимо использовать константу для размера массива, например:

Test TestArray[123]; //were 123 - max size of your's array data

или

#define TEST_ARRAY_SIZE 123

Test TestArray[TEST_ARRAY_SIZE];

, если вам нужен другой размер, используйте что-то вроде mallok:

uint32_t size;
Test *TestArrayPnt;

//some ware you got a size like size = 123

TestArrayPnt = new Test[size];

//continue a program. You can use TestArrayPnt [111] were 111 some offset less than size

delete[] TestArrayPnt; //when finish
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...