我怎麼可能做到這一點:Polymorphism->錯誤:「從派生類的基類沒有已知的轉換」
class Base
{
public:
int a, b, c;
void function();
...
};
class Derived1 :
private Base
{
public:
int d, e, f;
...
};
class Derived2 :
private Base
{
public:
void addObject(const Base* obj);
...
};
注意,我繼承了它作爲私人
然後我想這樣做:
Base* d1 = new Derived1();
Base* d2 = new Derived2();
d2->addObject(d1);
這裏是我得到的相關問題編譯:
C:\test\test.cpp||In function 'void init()':|
C:\test\test.cpp|423|error: no matching function for call to 'Derived2::addObject(const Base*)'|
C:\test\test.cpp|423|note: candidate is:|
C:\test\test.h|29|note: void Derived2::addObject(const Base*)|
C:\test\test.h|29|note: no known conversion for argument 1 from 'Derived1 {aka ... }' to 'const Base* {aka ... }'|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 9 seconds) ===|
我想通過一些派生類繼承Base
私人的原因是隱藏在公衆範圍內一些Base
的成員/功能。
我不想直接訪問一些Base::functions()
在公共範圍內,但沒有別的,使用Derived::function()
,而不是操縱其數據成員,讓派生類決定將執行什麼樣的動作。
不過,我能想到的覆蓋從基類中的每個功能,我不希望直接修改公開範圍,但其不靈活,在我的情況太多了。
我的意思是:
class Base
{
public:
//I must think in advance deciding whether if it'll be virtual or not.
[virtual] void f1(int);
[virtual] void f2(int);
[virtual] void f3(int);
//and many more...
};
class Derivedn :
private Base
{
public:
//hmm, I should not neglect to override certain base' member functions
//that I don't want to access in public scope.
void f1(int);
};
我想避免這種情況,但...
是否有其他方法可以讓我做的,與此類似,沒有覆蓋每個Base::function()
S'
AHM ,對不起,它是一個錯字。 – mr5
編譯器是否報告沒有錯字的相同錯誤? – DrFred
我沒有複製/粘貼代碼,這是我得到一個錯字。是。 – mr5