私有继承:名称查找错误
|
我有以下未编译的代码示例:
#include <stdio.h>
namespace my
{
class base1
{ // line 6
};
class base2: private base1
{
};
class derived: private base2
{
public:
// The following function just wants to print a pointer, nothing else!
void print(base1* pointer) {printf(\"%p\\n\", pointer);}
};
}
gcc打印的错误是:
test.cpp:6:错误:`class my :: base1 \'
无法访问
test.cpp:17:错误:在此范围内
语境
现在,我可以猜出问题出在哪里:当查看print
的声明时,编译器会看到base1
并认为:base1
是derived* this
的基类子对象,但您无权访问它!尽管我打算将base1
用作类型名称。
如何在C ++标准中看到这是正确的行为,而不是编译器中的错误(我确定这不是错误;我检查过的所有编译器的行为都如此)?
我该如何解决该错误?以下所有修复程序均有效,但我应该选择哪一个?
无效的打印(类base1 *指针){}
无效的print(:: my :: base1 *指针){}
class base1;
void print(base1 *指针){}
编辑:
int main()
{
my::base1 object1;
my::derived object3;
object3.print(&object1);
}
没有找到相关结果
已邀请:
1 个回复
勺的驴吓识