Saya mencoba untuk mengkompilasi program kumpulan benang berikut yang diposting pada tinjauan kode untuk mengujinya.
/codereview/55100/platform-independant-thread-pool-v4
Tapi saya mendapatkan kesalahan
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
sumber
sumber
make_unique
adalah fitur c ++ 14Jawaban:
make_unique
adalah fitur C ++ 14 yang akan datang dan karenanya mungkin tidak tersedia pada kompiler Anda, meskipun kompatibel dengan C ++ 11.Namun Anda dapat dengan mudah menggulung penerapan Anda sendiri:
template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); }
(FYI, ini adalah versi terakhir dari
make_unique
yang terpilih ke dalam C ++ 14. Ini termasuk fungsi tambahan untuk mencakup array, tetapi gagasan umumnya masih sama.)sumber
-std=c++1y
di baris perintah.Jika Anda memiliki kompiler terbaru, Anda dapat mengubah yang berikut ini di pengaturan build Anda:
C++ Language Dialect C++14[-std=c++14]
Ini berhasil untuk saya.
sumber
1. versi gcc> = 5
2. CXXFLAGS + = -std = c ++ 14
3. #include <memory>
sumber
Ini terjadi pada saya saat bekerja dengan XCode (Saya menggunakan versi XCode terbaru pada 2019 ...). Saya menggunakan, CMake untuk integrasi build. Menggunakan direktif berikut di CMakeLists.txt memperbaikinya untuk saya:
set(CMAKE_CXX_STANDARD 14)
.Contoh:
cmake_minimum_required(VERSION 3.14.0) set(CMAKE_CXX_STANDARD 14) # Rest of your declarations...
sumber
Jika Anda terjebak dengan c ++ 11 , Anda bisa mendapatkan
make_unique
dari abseil-cpp , kumpulan pustaka C ++ open source yang diambil dari basis kode internal Google.sumber
Dalam kasus saya, saya perlu memperbarui std = c ++
Maksud saya dalam file gradle saya adalah ini
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" } } .... }
Saya mengubah baris ini
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" } } .... }
Itu dia...
sumber