Я пытаюсь скомпилировать «libsamplerate.dll» с Visual Studio VC++ 2015 на Windows10, ссылаясь на: http://www.mega-nerd.com/SRC/win32.html.Что случилось с определением?
Затем я получил следующие ошибки:
termination_test.c
.\tests\termination_test.c(82): error C2057: expected constant expression
.\tests\termination_test.c(82): error C2466: cannot allocate an array of constant size 0
.\tests\termination_test.c(82): error C2133: 'in': unknown size
.\tests\termination_test.c(83): error C2057: expected constant expression
.\tests\termination_test.c(83): error C2466: cannot allocate an array of constant size 0
.\tests\termination_test.c(83): error C2133: 'out': unknown size
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\cl.exe"' : return code '0x2'
"termination_test.c" родом из: http://www.mega-nerd.com/SRC/download.html и здесь есть функция, которая вызывает ошибки:
static void
simple_test (int converter)
{
int ilen = 199030, olen = 1000, error ;
{
float in [ilen] ;
float out [olen] ;
double ratio = (1.0 * olen)/ilen ;
SRC_DATA src_data =
{ in, out,
ilen, olen,
0, 0, 0,
ratio
} ;
error = src_simple (&src_data, converter, 1) ;
if (error)
{ printf ("\n\nLine %d : %s\n\n", __LINE__, src_strerror (error)) ;
exit (1) ;
} ;
} ;
return ;
} /* simple_test */
Я просто модифицировали эти две линии до:
float in [199030] ;
float out [1000] ;
... затем, отлично работал.
Однако, что не так с определением?
int ilen = 199030, olen = 1000, error ;
Я поставил «сопзЬ» перед междунар, то я получил другую ошибку «C2166: L-значение задает константный объект». Как я могу сделать это безошибочным?
(PS, Это является открытым исходным кодом, так что не должно быть никаких ошибок. Это не вопрос, но я просто удивляюсь, почему.)
В приведенной выше ошибки * ожидается постоянное выражение * это *** НЕ *** значит 'константный Int x'. Это означает постоянное выражение, значение которого известно во время компиляции, например '#define ilen 199030' и' #define olen 1000' или 'enum {olen = 1000, ilen = 199030} '' –
Код верен. Это ваш компилятор, которого нет. MSVC не поддерживает 17-летние функции стандарта C, такие как VLA. Используйте современный стандартный компилятор, такой как gcc или clang. – Olaf
@David C. Rankin Вот что я хотел. Теперь он работает нормально. Я капитализировал эти две константы, чтобы показать, что они не изменяемы. Пожалуйста, сделайте свой комментарий ответом. Спасибо огромное! – IanHacker