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作为 a 传入void *,这不是默认情况,因为b它实际上是A. 只需通过强制转换明确地f()告诉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 回答