a******p 发帖数: 157 | 1 请教:
为什么会有ambiguous access of getDescription错误? 两个类中方法的signature不一
样啊
#include
using namespace std;
class Book
{
public:
string getDescription(int i) { return "Book"; }
};
class Romance
{
public:
string getDescription() {
return "Romance " ;
}
};
class my : public Book, public Romance
{
};
int main()
{
my book; int i=0;
cout << book.getDescription(i);
} |
t****t 发帖数: 6806 | 2 name lookup和overload resolution是分开的两步. 如果name lookup找到的不全是同
一个子类来的member, 那就是ambigious.
不一
【在 a******p 的大作中提到】 : 请教: : 为什么会有ambiguous access of getDescription错误? 两个类中方法的signature不一 : 样啊 : #include : using namespace std; : class Book : { : public: : string getDescription(int i) { return "Book"; } : };
|
N***m 发帖数: 4460 | 3 re.类似的,把book中getDescription改成private,并且去掉int i;
romance不变,还是会得到ambiguous.
【在 t****t 的大作中提到】 : name lookup和overload resolution是分开的两步. 如果name lookup找到的不全是同 : 一个子类来的member, 那就是ambigious. : : 不一
|
z****e 发帖数: 2024 | 4 和private 无关。
编译器先找匹配类型,然后再看accesibility.
找不到匹配,自然报错。
【在 N***m 的大作中提到】 : re.类似的,把book中getDescription改成private,并且去掉int i; : romance不变,还是会得到ambiguous.
|
a******p 发帖数: 157 | 5 谢谢解答
另外,为什么如果我不调用这个函数,vc就不抱错呢?
难道是编译器相关?不调用,就不做name lookup? |
z****e 发帖数: 2024 | 6 因为其他的部分还能凑合着用用,就先用着吧。
【在 a******p 的大作中提到】 : 谢谢解答 : 另外,为什么如果我不调用这个函数,vc就不抱错呢? : 难道是编译器相关?不调用,就不做name lookup?
|