3

次のコードに絞り込んだ問題があります。

class A
{
};

class B : private A
{
};

void f(A*)
{
}

void f(void*)
{
}

int main()
{
  B b;
  f(&b);
}

gcc 4.7 で次のエラーが発生します。

error: ‘A’ is an inaccessible base of ‘B’

A にアクセスできないことはわかっていますが、コンパイラで f(void*) を呼び出してほしかったと思います。この動作は正常ですか、それとも何か間違っていますか? それともコンパイラのバグですか?

4

2 に答える 2

4

オーバーロードは、アクセス チェックの前に解決されます。そのため、コンパイラはf(A*)適切なオーバーロードとして選択し、&b変換できないと判断しA*てエラー メッセージを表示します。

于 2012-11-08T18:45:01.393 に答える
0

bが として渡されていることを確認する必要があります。これは、実際には のインスタンスであるvoid *ため、デフォルトのケースではありません。それをキャストすることによって明示的に伝えてください:bAf()bvoid *

class A {
};

class B : private A {
};

void f(A*) {
}

void f(void*) {
}

int main() {
  B b;
  f((void*)&b);
}
于 2012-11-08T18:47:15.260 に答える