ত্রুটি :: মেক_উনিক 'স্টাডি' এর সদস্য নয়


92

আমি কোড পর্যালোচনাতে পোস্ট করা নিম্নলিখিত থ্রেড পুল প্রোগ্রামটি পরীক্ষা করার জন্য সংকলনের চেষ্টা করছি।

/codereview/55100/platform-ind dependant-thread-pool-v4

তবে আমি ত্রুটিগুলি পাচ্ছি

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 ‘unsignedauto ptr1 = std::make_unique<unsigned>();
                              ^
main.cpp:14:17: error: ‘make_unique’ is not a member of ‘stdauto ptr2 = std::make_unique<unsigned>();
             ^
main.cpp:14:34: error: expected primary-expression before ‘unsignedauto ptr2 = std::make_unique<unsigned>();

4
আপনি কোন সংকলক ব্যবহার করছেন?
মাত্তেও ইটালিয়া

4
আপনি কোন সংকলক / পতাকা ব্যবহার করেন? make_uniqueএটি একটি সি ++ 14 বৈশিষ্ট্য
ম্যাথিয়াবিস

সম্ভবত এটির কোডটি আপনার কাছে নেই কারণ এটি সি ++ 11 এর অংশ নয়?
আলেকজান্ডার ওহ

তিনি একরকম সি ++ ১৪ টি বৈশিষ্ট্য ব্যবহার করছেন এবং আপনি নন।
BЈовић

মেক_উনিক একটি বাস্তবায়ন হবে। এটি এতটা
আলেকজান্ডার ওহ

উত্তর:


143

make_uniqueএকটি আসন্ন সি ++ 14 বৈশিষ্ট্য এবং সুতরাং এটি সি ++ 11 অনুগত হলেও আপনার সংকলকটিতে উপলভ্য নয়।

তবে আপনি সহজেই নিজের প্রয়োগটি রোল করতে পারেন:

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args) {
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

(এফওয়াইআই, এটির চূড়ান্ত সংস্করণটি এখানেmake_unique সি ++ ১৪ এ ভোট দেওয়া হয়েছে This এতে অ্যারেগুলি কভার করার জন্য অতিরিক্ত কার্যাদি অন্তর্ভুক্ত রয়েছে, তবে সাধারণ ধারণাটি এখনও একই same)


6
@ ali786 আপনার সংকলকের উপর নির্ভর করে। জিসিসি সহ, উদাহরণস্বরূপ, আপনি -std=c++1yকমান্ড লাইনে পাস করেন।
অ্যাঞ্জু আর

4
@ ali786 সম্ভবত জিসিসি 4.8.1 সি ++ 14 এর এই অংশটি সমর্থন করে না? আপনি কি এর ডক্স নিয়ে পরামর্শ করেছেন? বিটিডাব্লু , সর্বশেষ জিসিসি 4.9.0
অ্যাঞ্জু আর তাই

4
@ ali786 প্রকৃতপক্ষে, এটি নিজেই সংকলকের বৈশিষ্ট্য নয়, বরং মানক গ্রন্থাগার বাস্তবায়নের (যা সম্ভবত আপনার ক্ষেত্রে libstdc ++ )। আফাইক, এই নির্দিষ্ট বৈশিষ্ট্যটির জন্য সমর্থনটি কেবলমাত্র জিসিসি ৪.৯.০ সহ যুক্ত করা হয়েছিল (যেমনটি এই পোস্টেও পরামর্শ দেওয়া হয়েছে )।
কমিকসান্সএসএমএস

4
@ উইক্টর আইজখাউট হ্যাঁ, আক্ষরিক অর্থে । আপনি যদি একটি ন্যূনতম উদাহরণ একসাথে রাখতে চান এবং এটি চালাতে সমস্যা হয় তবে একটি নতুন প্রশ্ন পোস্ট করতে পারেন। (এবং এফআইআই, আপনি মন্তব্যগুলিকে কোড হিসাবে প্রদর্শন করতে ব্যাকটিক্সে টেক্সটটি সংযুক্ত করতে পারেন)
কমিকসান্স এমএমএস

4
আমার জিসিসি 5.4 আছে এবং আমি এখানে উল্লিখিত সমস্ত পতাকা ব্যবহার করার পরেও এই ত্রুটিটি পাচ্ছি।
টিমোথি সোয়ান

16

আপনার যদি সর্বশেষতম সংকলক থাকে তবে আপনি নিজের বিল্ড সেটিংসে নিম্নলিখিতটি পরিবর্তন করতে পারেন:

 C++ Language Dialect    C++14[-std=c++14]

এটি আমার পক্ষে কাজ করে।


4
এটি জিসিসি / কলং এর জন্য নির্দিষ্ট এবং অন্যান্য সংকলকগুলির জন্য এটি কাজ নাও করতে পারে।
tambre


1

এক্সকোডের সাথে কাজ করার সময় আমার সাথে এটি ঘটে (আমি 2019 সালে এক্সকোডের সর্বাধিক সংস্করণ ব্যবহার করছি ...)। বিল্ড ইন্টিগ্রেশনের জন্য আমি সিএমকে ব্যবহার করছি। সিএমকেলিস্ট.টেক্সটে নিম্নলিখিত নির্দেশাবলী ব্যবহার করে এটি আমার জন্য স্থির করে:

set(CMAKE_CXX_STANDARD 14)

উদাহরণ:

cmake_minimum_required(VERSION 3.14.0)
set(CMAKE_CXX_STANDARD 14)

# Rest of your declarations...


0

আমার ক্ষেত্রে আমাকে স্টাড = সি ++ আপডেট করতে হবে

মানে আমার গ্রেড ফাইলটি ছিল এটি

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"
            }
        }
       ....
    }

আমি এই লাইনটি পরিবর্তন করেছি

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"
            }
        }
       ....
    }

এটাই...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.