【发布时间】:2011-10-20 01:17:28
【问题描述】:
以下代码产生编译时错误:
'
base::print' : 无法访问在类'base_der'中声明的私有成员
但是,我在派生类中创建了成员public。为什么这不起作用?
#include <iostream>
using namespace std;
class base
{
public:
int i;
void print(int i)
{
printf("base i\n");
}
};
class base_der : private base
{
public:
using base::print;
};
int main()
{
// This works:
base_der cls;
cls.print(10);
// This doesn't:
void (base_der::* print)(int);
print = &base_der::print; // Compile error here
}
【问题讨论】:
-
你有
class base_der : private base。 -
@SerbanLupu 你的例子很清楚,让我们感到困惑。我现在终于明白你的问题了,我无法解释。我已经修改了这个问题(希望)让它更清楚。 我还更正了一个错误:你在派生类中写了
base::print;,但你需要写using base::print;! -
@KonradRudolph "你在派生类中写了
base::print;,但你需要写using base::print;!" 这是历史语法,在using关键字之前. -
@0A0D 是的,但为什么这是一个问题是问题所在。这应该不是问题。
标签: c++ implicit-conversion member-function-pointers member-pointers private-inheritance