我有下面的代碼:十字架初始化錯誤
Class A {
public:
A::A(const char* name):
_name(name)
{}
virtual void doSomething();
private:
const char* _name;
}
Class B : public A {
B::B(const char* name):
A(name)
{}
void doSomething() {
//do something
}
}
到目前爲止好,但我在下面的代碼遇到一個錯誤crosses initialization of B* newB
:
std::vector<A*> vectorOfAs;
switch (enumType) {
case enum1 :
B* newB = new B("foobar");
vectorOfAs.push_back(newB);
break;
case enum2 :
C* newC = new C("barfoo");
vectorOfAs.push_back(newC);
break;
}
爲什麼錯誤?
一些背景: 我想將派生類的指針存儲在向量中以方便搜索/迭代。這些名稱是唯一的,所以我可以遍歷向量並查找指向具有正確名稱的對象的指針。從指向對象調用方法時,應該調用繼承的方法(//do something
)。
編輯:@FrançoisAndrieux:你是對的。犯(嚴重)錯字。 改變Class B : public B
到Class B: public A
聽起來就像你有一個'goto'或者不恰當的''swith'聲明。你能提供[mcve]嗎? – NathanOliver
'B類:公共B'好像你想要B類:公共A'? –
@FrançoisAndrieux更不要說在A中doSomething應該被聲明爲純虛函數,並且B中的方法都是私有的。就像Nathan所要求的那樣,正在編譯的實際代碼會很好。 –