সি ++ এ অতিরিক্ত যোগ্যতার ত্রুটি


120

আমার একটি সদস্য ফাংশন রয়েছে যা নিম্নলিখিত হিসাবে সংজ্ঞায়িত হয়েছে:

Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);

যখন আমি উত্সটি সংকলন করি তখন আমি পাই:

ত্রুটি: সদস্য 'পার্সেভ্যালু'-তে অতিরিক্ত যোগ্যতা' জেএসএনডিসিরিয়ায়ার :: '

এটা কি? আমি এই ত্রুটিটি কীভাবে সরিয়ে দেব?

উত্তর:


209

আপনার নিম্নলিখিত কোড রয়েছে কারণ এটি হ'ল

class JSONDeserializer
{
    Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
};

এটি বৈধ সি ++ নয় তবে ভিজ্যুয়াল স্টুডিওতে এটি গ্রহণযোগ্য বলে মনে হচ্ছে। একটি স্ট্যান্ডার্ড কমপ্লায়েন্ট কম্পাইলার (জিসিসি এই পয়েন্টের স্ট্যান্ডার্ডের সাথে আরও কমপ্লায়েন্ট করে) দিয়ে এটি সংকলন করতে আপনাকে নিম্নলিখিত কোডে পরিবর্তন করতে হবে।

class JSONDeserializer
{
    Value ParseValue(TDR type, const json_string& valueString);
};

ত্রুটিটি সত্য থেকে এসেছে যে JSONDeserializer::ParseValueএকটি যোগ্য নাম (একটি নাম স্থানের যোগ্যতা সহ একটি নাম), এবং এই জাতীয় নামটি একটি শ্রেণিতে পদ্ধতি নাম হিসাবে নিষিদ্ধ।


1
ভিজ্যুয়াল স্টুডিও সম্পর্কে সতর্ক করার কোনও উপায় আছে কি?
ইলমানুমো

1
@ অলতুমানো: না, তবে সিপ্পেক চেক এটি করতে পারে এবং সনাক্তকারীগুলিতে নন-এএসসিআইআই অক্ষরগুলি সনাক্ত করতে পারে যা জিসিসিতে কোড আরও পোর্টেবল বজায় রাখতে সহায়তা করে।
শার্পথুথ

@ শার্প টুথ: ধন্যবাদ, সিপ্পেক চেক আসলেই এই ত্রুটিগুলি সনাক্ত করতে পারে। সিপ্পেকের জন্য এমনকি একটি ভিজ্যুয়াল স্টুডিও প্লাগইন রয়েছে (তবে এটি বগি এবং সমস্ত ফাইলে সনাক্ত করে না)
ইলাস্টুমো

3
@ অলতুমানো: এটি কি এই জিনিসটি github.com/VioletGiraffe/cppcheck-vs-addin ? যদি আপনি দয়া করে বাগটি রিপোর্ট করতে পারেন - এই প্রকল্পটি বেশ জীবন্ত এবং এটি ঠিক করার খুব ভাল সম্ভাবনা রয়েছে।
ধারালো টুথ

ভবিষ্যত থেকে হ্যালো। আপনি এখন, এই সম্পর্কে সতর্ক করতে C4596 সতর্কীকরণ সক্ষম করে MSVC জোর করতে পারেন - docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/... । কম্পাইলার স্যুইচ / ওয়ে 4596 যোগ করে আমি এটিকে ত্রুটি হিসাবে রিপোর্ট করার জন্য এতদূর গিয়েছিলাম
লেন

19

এর অর্থ শ্রেণীর ফাংশন সহ একটি শ্রেণীর অতিরিক্ত কাজ করা হয়। অপসারণ করার চেষ্টা করুনJSONDeserializer::


13

আপনি কি এই লাইনটি ক্লাস ঘোষণার ভিতরে রেখে দিচ্ছেন ? সেক্ষেত্রে আপনার এটি অপসারণ করা উচিত JSONDeserializer::


6

পাঠযোগ্যতা / রক্ষণাবেক্ষণের জন্য উপযুক্ত নোট:

আপনি JSONDeserializer::আপনার প্রয়োগকারী ফাইল (* .cpp) এর সংজ্ঞা দিয়ে বাছাই করতে পারেন ।

আপনার শ্রেণিভিত্তিক ঘোষণার যতক্ষণ না (অন্যরা উল্লিখিত হিসাবে) যোগ্যতা না রাখে ততক্ষণ g ++ / gcc দুর্দান্ত খেলবে।

উদাহরণ স্বরূপ:

মাইফাইলে।

class JSONDeserializer
{
    Value ParseValue(TDR type, const json_string& valueString);
};

এবং myFile.cpp এ:

Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString)
{
    do_something(type, valueString);
}

যখন MyFile.cpp অনেকগুলি ক্লাস থেকে পদ্ধতিগুলি প্রয়োগ করে, এটি কেবল সংজ্ঞাটি দেখে কারা কার অন্তর্ভুক্ত তা জানতে সহায়তা করে।


JSONDeserializer::সিপিপি ফাইলের জন্য (বা সাধারণভাবে সংজ্ঞাটি) প্রয়োজনীয়। অন্যথায়, আপনি একটি অপরিবর্তিত রেফারেন্স পাবেন। coliru.stacked-crooked.com/a/8f8a0cd3f9db6c94 coliru.stacked-crooked.com/a/6cd1efe94c09d521
জো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.