J'essaie de compiler le programme de pool de threads suivant publié sur la révision de code pour le tester.
https://codereview.stackexchange.com/questions/55100/platform-independant-thread-pool-v4
Mais je reçois les erreurs
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>();
make_unique
est un fonctionnalité C++ 14 à venir et pourrait donc ne pas être disponible sur votre compilateur, même s'il est conforme à C++ 11.
Vous pouvez cependant facilement lancer votre propre implémentation:
template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args) {
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
(Pour info, voici la version finale de make_unique
qui a été voté en C++ 14. Cela inclut des fonctions supplémentaires pour couvrir les tableaux, mais l’idée générale reste la même.)
Si vous avez le dernier compilateur, vous pouvez modifier les éléments suivants dans vos paramètres de construction:
C++ Language Dialect C++14[-std=c++14]
Cela fonctionne pour moi.
Version 1.gcc> = 5
2.CXXFLAGS + = -std = c ++ 14
3. #include <mémoire>
Cela m’arrive lorsque je travaille avec XCode (j’utilise la version la plus récente de XCode en 2019 ...). J'utilise, CMake pour l'intégration de la construction. Utiliser la directive suivante dans CMakeLists.txt l'a corrigé pour moi:
set(CMAKE_CXX_STANDARD 14)
.
Exemple:
cmake_minimum_required(VERSION 3.14.0)
set(CMAKE_CXX_STANDARD 14)
# Rest of your declarations...
Dans mon cas J'avais besoin de mettre à jour le std = c ++
Je veux dire dans mon dossier était-ce
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"
}
}
....
}
J'ai changé cette ligne
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"
}
}
....
}
C'est ça...