Possible Duplicate:
Why do multiple-inherited functions with same name but different signatures not get treated as overloaded functions?あいまいなアクセス
私はエラーを取得しています:
ambiguous access of 'attach'
could be the 'attach' in base 'A::A1'
or could be the 'attach' in base 'B::B1'
は、これはコードです:
class A
{
public:
class A1
{
public:
virtual void attach(A & a) { }
};
public:
};
class B
{
public:
class B1
{
public:
virtual void attach(B & b) { }
};
public:
};
class C : public A::A1, public B::B1
{
public:
C(){ }
};
void main(int argc, char *argv[])
{
A a;
B b;
C c;
c.attach(a);
c.attach(b);
}
私はエラーを理解しています。コンパイラは混乱しているので、スコープが必要です:
c.A::A1::attach(a);
c.B::B1::attach(b);
その構文は恐ろしいです。私はCのメソッドを添付定義することができ、かつは今コンパイラはそれを取得しますが、私はこれらのすべては、メソッドをアタッチ定義する必要がありますする必要はありません:コンパイラがある理由
class C : public A::A1, public B::B1
{
public:
C(){ }
void attach(A & a) { A::A1::attach(a); }
void attach(B & b) { B::B1::attach(b); }
};
誰も私に説明することができます「添付」が使われるべきであることが明らかなとき(私の心の中で)、「添付」について混乱していますか?誰でもスコープを必要としないソリューションを提供できますか?
UPDATE:2番目のCの例でスコープを更新しました。 A::A1::attach(a)
UPDATEは:C++プログラマーとしての私の18年間で
class C : public A::A1, public B::B1
{
public:
using A::A1::attach;
using B::B1::attach;
public:
C(){ }
};
、私はそのように「を使用して」を使用しなければならなかったことがありません:重複は以下に記載調べるとき、私は解決策に出くわしました。私はそれが存在するかどうかも知らなかった。
@Xeo:私は重複しているとは思っていません。 – Puppy
@DeadMG:Ehm ..私の質問のタイトルの最初の単語は何ですか? – Xeo
@ Xeoは正しいです。それは複製です。答えはそこにあります。私は、(驚くべきことに)解決策を入れるために質問を更新しました。 – Blazes