פורסם 2009 בפברואר 1016 שנים במבחן נתון הקוד הבא ויש לומר האם הוא מתקמפל ומדוע. ב-Visual Studio מתקבלת שגיאת הקומפילציה "'initializing' : ambiguous conversions from 'D *' to 'A *'" ושאלתי היא - למה בדיוק?#include <iostream>using namespace std;class A{public: void print() const { cout << 'A' << endl; }};class B : public A{public: void print() const { cout << 'B' << endl; }};class C : public A{public: void print() const { cout << 'C' << endl; }};class D : public B, public C{public: void print() const { cout << 'D'; }};void main(){ A *p = new D; p->print();}
פורסם 2009 בפברואר 1016 שנים http://msdn.microsoft.com/en-us/library/sa77cce8.aspxזה למה. יש לך בתוך אובייקט מסוג D שתי מופעים של אובייקט מסוג A (אחד ב B ואחד ב C וזה בגלל ש A לא נורש וירטואלית) ולכן הקומפיילר לא יודע למי מהם אתה מתכוון. הפתרון נמצא שם גם.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.