Estoy tratando de compilar el siguiente programa de grupo de subprocesos publicado en la revisión del código para probarlo.
/codereview/55100/platform-independant-thread-pool-v4
Pero estoy recibiendo los errores
threadpool.hpp: In member function ‘std::future<decltype (task((forward<Args>)(args)...))> threadpool::enqueue_task(Func&&, Args&& ...)’:
threadpool.hpp:94:28: error: ‘make_unique’ was not declared in this scope
auto package_ptr = make_unique<task_package_impl<R, decltype(bound_task)>> (std::move(bound_task), std::move(promise));
^
threadpool.hpp:94:81: error: expected primary-expression before ‘>’ token
auto package_ptr = make_unique<task_package_impl<R, decltype(bound_task)>>(std::move(bound_task), std::move(promise));
^
main.cpp: In function ‘int main()’:
main.cpp:9:17: error: ‘make_unique’ is not a member of ‘std’
auto ptr1 = std::make_unique<unsigned>();
^
main.cpp:9:34: error: expected primary-expression before ‘unsigned’
auto ptr1 = std::make_unique<unsigned>();
^
main.cpp:14:17: error: ‘make_unique’ is not a member of ‘std’
auto ptr2 = std::make_unique<unsigned>();
^
main.cpp:14:34: error: expected primary-expression before ‘unsigned’
auto ptr2 = std::make_unique<unsigned>();
c++
c++11
compiler-errors
c++14
unique-ptr
Ali786
fuente
fuente
make_unique
es una función de C ++ 14Respuestas:
make_unique
es una característica de C ++ 14 próxima y, por lo tanto, podría no estar disponible en su compilador, incluso si es compatible con C ++ 11.Sin embargo, puede implementar fácilmente su propia implementación:
template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); }
(Para su información, aquí está la versión final
make_unique
que se votó en C ++ 14. Esto incluye funciones adicionales para cubrir matrices, pero la idea general sigue siendo la misma).fuente
-std=c++1y
la línea de comando.Si tiene el compilador más reciente, puede cambiar lo siguiente en su configuración de compilación:
C++ Language Dialect C++14[-std=c++14]
Esto funciona para mi.
fuente
1.gcc versión> = 5
2.CXXFLAGS + = -std = c ++ 14
3. #include <memoria>
fuente
Esto me sucede mientras trabajo con XCode (estoy usando la versión más actual de XCode en 2019 ...). Estoy usando CMake para la integración de compilación. El uso de la siguiente directiva en CMakeLists.txt lo solucionó para mí:
set(CMAKE_CXX_STANDARD 14)
.Ejemplo:
cmake_minimum_required(VERSION 3.14.0) set(CMAKE_CXX_STANDARD 14) # Rest of your declarations...
fuente
Si está atascado con c ++ 11 , puede obtener
make_unique
de abseil-cpp , una colección de código abierto de bibliotecas de C ++ extraída de la base de código interna de Google.fuente
En mi caso , necesitaba actualizar std = c ++
Quiero decir, en mi archivo gradle estaba esto
android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "-std=c++11", "-Wall" arguments "-DANDROID_STL=c++_static", "-DARCORE_LIBPATH=${arcore_libpath}/jni", "-DARCORE_INCLUDE=${project.rootDir}/app/src/main/libs" } } .... }
Cambié esta línea
android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "-std=c++17", "-Wall" <-- this number from 11 to 17 (or 14) arguments "-DANDROID_STL=c++_static", "-DARCORE_LIBPATH=${arcore_libpath}/jni", "-DARCORE_INCLUDE=${project.rootDir}/app/src/main/libs" } } .... }
Eso es...
fuente