I have following test program
#include<iostream>
using namespace std;
class Faculty {
// data members of Faculty
public:
Faculty(int x) {
cout<<"Faculty::Faculty(int ) called"<< endl;
}
void test() {
cout<<"Faculty::test called" << endl;
}
};
class Student {
// data members of Student
public:
Student(int x) {
cout<<"Student::Student(int ) called"<< endl;
}
void test() {
cout<<"Student::test called" << endl;
}
};
class TA : virtual public Faculty, virtual public Student {
public:
TA(int x):Student(x), Faculty(x) {
cout<<"TA::TA(int ) called"<< endl;
}
};
int main() {
TA ta1(30);
ta1.test();
}
An errors is getting during compilation
8be257447d8c26ef785b1a60f2884a.cpp: In function 'int main()':
748be257447d8c26ef785b1a60f2884a.cpp:36:6: error: request for member 'test' is ambiguous
ta1.test();
^
748be257447d8c26ef785b1a60f2884a.cpp:22:7: note: candidates are: void Student::test()
void test() {
^
748be257447d8c26ef785b1a60f2884a.cpp:11:7: note: void Faculty::test()
void test() {
^
Even I'm using virtual inheritance here. Any solution to this?
There is no need of virtual
keyword here, classes Student
and Faculty
are not related via inheritance from common class.
If you want specific method to be used in TA
you can put using Student::test;
or using Faculty::test;
inside TA
class declaration.
I hope that this example appeared from purely educational purposes, because if it's used/planned to be used in real application - it's a sign of something's going wrong with design :)