Ошибка с переменным размером массива при использовании компилятора Visual C ++ (Visual Studio 2010).Как обойти эту проблему? - PullRequest
3 голосов
/ 04 апреля 2011

У меня возникли некоторые проблемы при компиляции файла c ++, который хорошо работал как предыдущая сборка в GCC.Проблема в том, что я использую векторы переменного размера массива:

unsigned int howmany;
std::vector<int>* array_adresses[howmany]; 

В настоящее время я использую компилятор Visual C Studio 2010 C ++ для создания 64-битных Mex-файлов Matlab.Поскольку VC ++ не позволяет мне использовать массивы, размер которых неизвестен во время компиляции, я получаю следующие сообщения об ошибках:

ошибка 2057: ожидаемое константное выражение ошибка 2466: ошибка 2133: неизвестный размер

Есть ли способ собрать 64-битный mex-файл, используя опцию компилятора GCC, или собрать его с помощью другого 64-битного компилятора под Matlab?

Заранее спасибо !!

Ответы [ 3 ]

4 голосов
/ 04 апреля 2011

howmany должно быть постоянным и должно быть определенной величиной, например так:

const unsigned int howmany = 5;
std::vector<int>* array_adresses[howmany];

Или вы можете определить это динамически следующим образом:

unsigned int howmany = 5;
std::vector<int>* array_adresses = new std::vector<int>[howmany];
2 голосов
/ 04 апреля 2011

Стандарт C ++ не допускает массив переменной длины.Давайте возьмем этот код:

int main(int argc, char *argv[])
{
    int a[argc];
    return 0;
}

Это прекрасно компилируется с g++ foo.cpp, но не работает, если вам требуется строгое соответствие стандарту.

g++ foo.cpp -std=c++98 -pedantic:

foo.cpp: In function ‘int main(int, char**)’:
foo.cpp:8: warning: ISO C++ forbids variable length array ‘a’

Вы должны использовать vector<vector<int> *> или vector<int> ** вместо этого, как уже предлагали другие.

0 голосов
/ 28 мая 2019

Просто замените int ptr [howmany];с вектором ptr (howmany);

для получения также автоматического освобождения в конце области действия

...