Кто сталкивался с данной проблемой при работе с OpenCV? Язык С++, работаю в VS2013.
Ошибка 1 error C2864: "cv::sfinae::has_parenthesis_operator::value": статический элемент данных с инициализатором внутри класса должен иметь неизменяемый целочисленный тип const c:\users\admin\documents\visual studio 2013\projects\opencv2\core\cvstd_wrapper.hpp 52 1 Second_test
Вот собственно и весь код:
#include "opencv2/core/core.hpp"
#include <opencv2/core/types_c.h>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/core/core_c.h>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
int main(int argc, char** argv)
{
system("pause");
return 0;
}
Объявление этой строке в cvstd_wrapper.hpp
имеет вид
static CV_CONSTEXPR bool value = type::value;
Такое объявление будет корректным в С++ только если CV_CONSTEXPR
заменяется на constexpr
или на const
(или на inline
, но здесь подразумевается константность).
Определение макроса в cvdef.h
имеет вид
#ifndef CV_CONSTEXPR
# if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900/*MSVS 2015*/)
# define CV_CONSTEXPR constexpr
# endif
#endif
#ifndef CV_CONSTEXPR
# define CV_CONSTEXPR
#endif
То есть по какой-то причине они не определяют CV_CONSTEXPR
как const
тогда, когда не могут определить его как constexpr
. Это странно.
История изменений показывает такое 22 дня назад
#ifndef CV_CONSTEXPR
- # define CV_CONSTEXPR const
+ # define CV_CONSTEXPR
#endif
То есть const
там таки был, но некто "alalek" выкосил этот const
нафиг. Скорее всего он исправлял что-то другое, но в результате "убил" это место в cvstd_wrapper.hpp
. К тому же, судя по тому, что это fallback, это "перетягивание каната" длится уже некоторое время. Типичный опенсорсовский бардак.
Как видно по комментарию к этому коммиту, в других местах кода у них используются объявления вида
static CV_CONSTEXPR const int var = ...;
с явным const
. Но раз "alalek" сделал это исправление, то тогда нужно приводить к этому виду - с явным const
- все такие места, включая cvstd_wrapper.hpp
тоже.
Либо ждите пока исправят этот косяк, либо берите более новую версию VS и работайте в режиме C++11 или выше.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как организовать многопоточную обработку файлов (открытие, сбор данных, закрытие) из массива QFileInfoList?
Столкнулся с такой проблемой: нужно удалить N сообщений на канале в дискордеКак это сделать?