我有下面的代碼示例無法編譯:私有繼承:名稱查找錯誤
#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: error: `class my::base1' is inaccessible
test.cpp:17: error: within this context
現在,我能猜到是什麼問題是:在查看print
的聲明時,編譯器看到base1
並認爲:base1
是derived* this
的基類子對象,但您無權訪問它!雖然我打算base1
應該只是一個類型的名字。如何在C++標準中看到這是一個正確的行爲,而不是編譯器中的錯誤(我相信它不是一個bug;我檢查過的所有編譯器都表現如此)?
我該如何解決這個錯誤?所有以下修復工作,但我應該選擇哪一個?
void print(class base1* pointer) {}
void print(::my:: base1* pointer) {}
class base1; void print(base1* pointer) {}
編輯:
int main()
{
my::base1 object1;
my::derived object3;
object3.print(&object1);
}
你可以張貼在main()? – 2011-04-12 11:52:41
很好的例子表明私人繼承與組成完全不同! – curiousguy 2011-12-26 00:14:09