এমএসভিসি, কলং এবং জিসিসি এই কোডটিতে একমত নন:
struct Base { int x; };
struct Der1 : public Base {};
struct Der2 : public Base {};
struct AllDer : public Der1, public Der2 {
void foo() {
Der1::Base::x = 5;
}
};
জিসিসি:
<source>: In member function 'void AllDer::foo()':
<source>:10:21: error: 'Base' is an ambiguous base of 'AllDer'
10 | Der1::Base::x = 5;
| ^
Compiler returned: 1
ঝনঝন একটি অনুরূপ ত্রুটি দেয় এবং এমএসভিসি কোনও ত্রুটি দেয় না।
এখানে কে?
আমি মনে করি এটি [class.member.lookup] এ আচ্ছাদিত রয়েছে তবে এই ক্ষেত্রে এটি আমাকে কী বলার চেষ্টা করছে তা বুঝতে আমার অসুবিধা হচ্ছে। দয়া করে প্রাসঙ্গিক অংশগুলি উদ্ধৃত করুন এবং সম্ভব হলে সরল ইংরেজিতে ব্যাখ্যা করুন।
পিএস: এই প্রশ্নে অনুপ্রাণিত কেন বেস-ক্লাসের সাথে রেফারেন্সটি :: -অপারেটর ট্রাটেড ক্লাসের সাথে অস্পষ্ট?
পিপিএস: আসলে আমার সন্দেহটি Der1::Base
প্রকারটিকে বোঝায় কিনা , তা হবে Base
(এবং তারপরে Der2::Base
হুবহু একই ধরণের), অথবা সাবোবজেক্টটিতে। আমি নিশ্চিত যে এটি প্রথম, তবে এটি যদি পরে হয় তবে এমএসভিসি ঠিক হবে।
::Base
তবে আসল প্রশ্নটি এখানে কিছুটা আলাদা বলে মনে হচ্ছে। দুটি ধরণের সাবওবজেক্ট রয়েছে Base
এবং উভয়েরই Base::x
সদস্য রয়েছে।