我有以下的測試程序如何解決C++中的鑽石問題?
#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();
}
的錯誤,編譯
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() {
^
中越來越即使我在這裏使用虛擬繼承。任何解決方案?
這裏沒有鑽石。你只是從兩個不相關的基類中發生名字衝突,而虛擬繼承對此無能爲力。不要把你不明白的解決方案扔給無關的問題。 –
有關於此的任何解決方案? – BSalunke
嘗試使用'ta1.Student :: test()'或'ta1.Faculty :: test()' – GAVD