Ben derleme değil Aşağıdaki kod örneği vardır: gcc baskılar olduğunuÖzel miras: ad arama hatası
#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);}
};
}
hatası: Şimdi
test.cpp:6: error: `class my::base1' is inaccessible
test.cpp:17: error: within this context
i ne sorunu tahmin edebilirsiniz : print
bildirgesine bakıldığında, derleyici base1
görür ve düşünür: base1
derived* this
'un temel sınıf alt nesnesidir, ancak buna erişiminiz yoktur! Ben base1
sadece bir tür ismi olması gerektiğini düşünürken.
C++ Standardında bunun doğru bir davranış olduğunu ve derleyicide bir hata olmadığını nasıl görebilirim (eminim ki bir hata değil; tüm derleyicileri kontrol ettim)?
Bu hatayı nasıl düzeltmeliyim? Aşağıdaki tüm düzeltmeler çalışır, ancak hangisini seçmeliyim?
void print(class base1* pointer) {}
void print(::my:: base1* pointer) {}
class base1; void print(base1* pointer) {}
Düzenleme:
int main()
{
my::base1 object1;
my::derived object3;
object3.print(&object1);
}
ana gönderebilir miyim()? –
Özel mirasın, kompozisyonla aynı şey olmadığını gösteren güzel örnek! – curiousguy