天天看點

C++ - 多重繼承(multiple inheritance)歧義(ambiguous)

多重繼承(multiple inheritance)歧義(ambiguous)

本文位址: http://blog.csdn.net/caroline_wendy/article/details/23737553

多重繼承, 如果基類(base class)的成員函數名稱相同,重載(overload)函數調用, 會忽略public和private, 選取最佳的比對函數,

比對度相同, 則會造成歧義, 産出錯誤:request for member 'xxx' is ambiguous, (GCC)

如需使用, 可以添加具體的域操作符, 指定類("class::method()").

代碼如下:

/*
 * test.cpp
 *
 *  Created on: 2014.04.14
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <iostream>
#include <string>

using namespace std;

class BorrowableItem {
public: //共有
	void checkout() { std::cout << "BorrowableItem" << std::endl; }
};

class ElectronicGadget {
private: //私有
	bool checkout() const { return true; };
};

class MP3Player:
		public BorrowableItem,
		public ElectronicGadget
{};

int main() {
	MP3Player mp;
	mp.BorrowableItem::checkout(); //不添加域操作符會産生歧義
	return 0;
}
           

輸出:

BorrowableItem
           

繼續閱讀