Ошибка C2061: синтаксическая ошибка: идентификатор «буфер» при компиляции algparam.h - PullRequest
0 голосов
/ 05 мая 2018

У меня та же ошибка, что и Crypto ++, выдающая ошибку компилятора в algparam.h при компиляции игры с использованием Crypto ++. Ошибка:

Error C2061: syntax error : identifier 'buffer' (at line 397)

Вот код. Он начинается в строке 390 и заканчивается в строке 411.

#if defined(DEBUG_NEW) && (_MSC_VER >= 1300)
# pragma push_macro("new")
# undef new
#endif

    void MoveInto(void *buffer) const
    {
        AlgorithmParametersTemplate<T>* p = new(buffer) AlgorithmParametersTemplate<T>(*this);
        CRYPTOPP_UNUSED(p); // silence warning
    }

#if defined(DEBUG_NEW) && (_MSC_VER >= 1300)
# pragma pop_macro("new")
#endif

protected:
    T m_value;
};

CRYPTOPP_DLL_TEMPLATE_CLASS AlgorithmParametersTemplate<bool>;
CRYPTOPP_DLL_TEMPLATE_CLASS AlgorithmParametersTemplate<int>;
CRYPTOPP_DLL_TEMPLATE_CLASS AlgorithmParametersTemplate<ConstByteArrayParameter>;

В чем проблема и как ее исправить?


Вот библиотеки, которые я использую:

  • повышение 1,67 (пробовал 1,63 тоже)
  • SQLAPI ++
  • лагерь
  • mysqlcppconns

Вот сообщение об ошибке:

1>c:\local\cryptopp\algparam.h(397): error C2061: syntax error: identifier 'buffer'
1>c:\local\cryptopp\algparam.h(396): note: while compiling class template member function 'void CryptoPP::AlgorithmParametersTemplate<CryptoPP::ConstByteArrayParameter>::MoveInto(void *) const'
1>c:\local\cryptopp\algparam.h(411): note: see reference to class template instantiation 'CryptoPP::AlgorithmParametersTemplate<CryptoPP::ConstByteArrayParameter>' being compiled

1 Ответ

0 голосов
/ 13 мая 2018

Вот функция, с которой у вас возникают проблемы: algparam.h:

395    void MoveInto(void *buffer) const
396    {
397        AlgorithmParametersTemplate<T>* p = new(buffer) AlgorithmParametersTemplate<T>(*this);
398        CRYPTOPP_UNUSED(p);  // silence warning
399    }

Я подозреваю, что одна из других используемых вами библиотек не соответствует определению new.

Полагаю, вам нужно скомпилировать исходный файл, но вместо создания объектного файла вам необходимо использовать / P (предварительная обработка в файл) или / E (предварительная обработка в стандартный вывод) . Как только файл обработан, взгляните на определение new. Оттуда вернитесь в библиотеку, которая его меняет.

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

  • повышение 1,67 (пробовал 1,63 тоже)
  • SQLAPI ++
  • лагерь
  • mysqlcppconns

Повышение иногда делает некоторые необычные вещи, и я подозреваю, что повышение - это проблема.

...