এখানে এনাম ভেরিয়েবলের মূল্য কেন?


12

উদাহরণ:

typedef enum Color
{
    RED,
    GREEN,
    BLUE
} Color;

void func(unsigned int& num)
{
    num++;
}

int main()
{
    Color clr = RED;
    func(clr);
    return 0;
}

আমি এটি সংকলন করার সময় আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

<source>: In function 'int main()':

<source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' to an rvalue of type 'unsigned int'

     func(clr);

         ^~~

আমি মনে করি যে ভেরিয়েবলটি ( clr) আমি পাস করি func(unsigned int&)এটি একটি লভ্যালু। আমি এর ঠিকানা পেতে পারি clrএবং এটিতে আরও একটি মূল্য নির্ধারণ করতে পারি। আমি যখন এটি পাস করার চেষ্টা করি তখন কেন এটি কোনও মূল্যায়ণে পরিণত হয় func(unsigned int&)?


5
নিজেকে জিজ্ঞাসা করুন: এটি enumএকটি unsigned int?
নাথানঅলিভার

@ নাথান অলিভার-রিইনস্টেটমোনিকা আমার মূল মতামত অনুসারে, আমি মনে করি typedef enumযে কোনও দেশীয় প্রকার নয়, এবং সি ++ এটিকে unsigned intআসলে একটি প্রকার হিসাবে বিবেচনা করবে ।
কোইন

1
এক্ষেত্রে জিসিসির ত্রুটি বার্তাটি সাব-থিমাল। কলং মূল ধরণের প্রিন্ট করে কম বিভ্রান্তিকর বার্তা দেবে clr
সিপ্লেয়ার্নার

@ ক্লিপনার হ্যাঁ, সে কারণেই আমি ভেবেছিলাম যে সি ++ তে enum typeতেমন ব্যবহার করা unsigned intহয়।
কোইন

enum Xএর নিজস্ব ধরণ, এর থেকে আলাদাint
এমএম

উত্তর:


22

clrনিজেই টাইপের একটি মূল্যবান Color। কিন্তু ফাংশন একটি গ্রহণ করে না Color। এটি একটি (রেফারেন্স) গ্রহণ করে unsigned int। সুতরাং, যুক্তি রূপান্তরিত (অন্তর্নিহিত)। এবং রূপান্তর ফলাফল টাইপ একটি মূল্য আছে unsigned int


1
হ্যাঁ, আমি func(Color&)প্রশ্ন জিজ্ঞাসার আগে চেষ্টা করি এবং এটি পাস করে সংকলন করে। আমি কেবল ভেবেছিলাম সি ++ টাইপকে সংকলনের enumধরন হিসাবে বিবেচনা করবে unsigned int। আপনার উত্তরের জন্য ধন্যবাদ.
কোয়েন

একটি জিনিস যা বিভ্রান্তি বাড়িয়ে তোলে তা হল সি প্রায় সি ++ এর নিখুঁত উপসেট। কমপক্ষে, আপনি সি তে যা কিছু করতে পারেন, আপনি প্রায় অভিন্ন কোডের সাহায্যে সি ++ তে করতে পারেন, বিশেষত জিসিসি / বিড়ম্বনায়। আপনার সিসি'র 'সীমাবদ্ধ' এর জন্য সি ++ প্রতিস্থাপন হিসাবে সংকলক নির্ভর কনস্ট্রাক্টসগুলিরও প্রয়োজন হবে যা জিসিসি দ্বারা সরবরাহ করা হয়। এনামগুলি সি এবং সি ++ তে পৃথক, উদাহরণস্বরূপ, যদি কিছু রঙের এনাম হয়, তবে 'কিছু কালার = 1' আইনী সি, তবে সি ++ নয়।
এরিক আলাপো

0

এনাম টাইপ আরআইএম এবং অ্যাসাইনমেন্ট অবশ্যই এনামের ভিতরে থাকতে হবে , সুতরাং এনাম টাইপটি লভ্যালু হতে পারে না。 শূন্য ফানক (স্বাক্ষরবিহীন ইন্টি এবং নাম্বার) এই ফাংশনটির উদ্ধৃতি প্রকারের প্রয়োজন


যদি আমি পরিবর্তন func(unsigned int&)করতে func(Color&), কম্পাইলার তা গ্রহণ। সুতরাং আমি এনাম টাইপ ভেরিয়েবল একটি lvueue মনে করি।
কোইন

না, কারণ এনাম টাইপ এসাইনমেন্ট ইন্ট এনামের বাইরে परिभाषित করতে পারে না
সুপারম্যান

তুমি বলতে চাও এটা এখনও একটা মূল্য? তবে আমি এটিতে একটি নন-কনস্ট্যান্ট লভ্যালু রেফারেন্সটি আবদ্ধ করি func(Color&)এবং এটি পাস হয়।
কোইন

হ্যাঁ - এটি এখনও একটি মূল্য , ফানক (রঙ & কী) এই ফাংশন পারম কী কেবলমাত্র রেড, গ্রিন, ব্লু, নইলে ভুল হবে will
সুপারম্যান

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