Ich versuche, das folgende Thread-Pool-Programm zu kompilieren, das bei der Codeüberprüfung veröffentlicht wurde, um es zu testen.
/codereview/55100/platform-independant-thread-pool-v4
Aber ich bekomme die Fehler
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
quelle
quelle
make_unique
ist eine c ++ 14 FunktionAntworten:
make_unique
ist eine kommende C ++ 14-Funktion und daher möglicherweise nicht auf Ihrem Compiler verfügbar, selbst wenn sie C ++ 11-kompatibel ist.Sie können jedoch ganz einfach Ihre eigene Implementierung rollen:
(Zu Ihrer Information, hier ist die endgültige Version
make_unique
, die in C ++ 14 gewählt wurde. Dies beinhaltet zusätzliche Funktionen zur Abdeckung von Arrays, aber die allgemeine Idee ist immer noch dieselbe.)quelle
-std=c++1y
die Befehlszeile.Wenn Sie über den neuesten Compiler verfügen, können Sie Folgendes in Ihren Build-Einstellungen ändern:
Das funktioniert bei mir.
quelle
1.gcc version> = 5
2.CXXFLAGS + = -std = c ++ 14
3. #include <memory>
quelle
Dies passiert mir während der Arbeit mit XCode (ich verwende die aktuellste Version von XCode im Jahr 2019 ...). Ich verwende CMake für die Build-Integration. Die folgende Anweisung in CMakeLists.txt hat es für mich behoben:
set(CMAKE_CXX_STANDARD 14)
.Beispiel:
quelle
Wenn Sie mit stecken c ++ 11 , können Sie sich
make_unique
von abseil-CPP , eine Open - Source - Sammlung von C ++ Bibliotheken aus dem Google-interner Code - Basis erstellt.quelle
In meinem Fall musste ich std = c ++ aktualisieren
Ich meine in meiner Gradle-Datei war das
Ich habe diese Zeile geändert
Das ist es...
quelle