Problem Mehrfachvererbung

marcelz

Grünschnabel
Hallo Ihr lieben,

ich habe eine kleine Frage zu dem unten angegeben c++ code.

Wenn ich in der Klasse X den Standard Konstruktor entferne, bekomme ich nen Fehler vom Compiler. Jedoch möchte ich gar nicht, dass dieser aufgerufen wird bei der Vererbung, sondern der X(int a) Konstruktor und das müsste doch folgendes bewirken oder?

Y1( int a):X(a)

Für C++ nutze ich VS98 C++

Gruß

Marcel
Code:
#include <iostream>
using namespace std;

class X
{
public:

	int a;
	X()
	{
		
	}

	X(int a)
	{
		cout << "X"<< endl;
	}
	virtual ~X(){}
	
};

class Y1 : public virtual X
{
public:
	Y1( int a):X(a)
	{
		cout << "Y1"<< endl;
	}
	virtual ~Y1(){}
};

class Y2 : public virtual X
{
public:
	Y2( int a):X(a)
	{
		cout << "Y2"<< endl;
	}
	virtual ~Y2(){}
};

class Z : public Y1,public Y2 
{
public:
	Z( int a,  int b):Y1(a),Y2(b)
	{
	}
	
};

int main()
{
	Z * z = new Z(1,2);
	cin.get();
	return 0;
}
 
Hallo, hast du dir mal die Fehlerbeschreibung zum Compiler-Fehler C2512 durchgelesen? Dort steht u.a. Folgendes:

"If you provide a constructor that takes a nonvoid parameter, you must also provide a default constructor. The default constructor can be a constructor with default values for all parameters."

Du könntest das Problem, daher lösen, wenn du die Klasse X so implementierst:
Code:
class X
{
public:
    X(int a = 0) { cout << "X"<< endl; }
    virtual ~X(){}
};
Gruß
MCoder
 
Zurück