2011-11-23 26 views
2

我有分配與基類指針派生類對象中的問題,使用針對派生類對象的基類指針...上堆與堆

class Base 
{ 
    void print() { cout<<"Class Base"; } 

}; 

class Derived: public Base 
{ 
    void print() { cout<<"class Derived"; } 

}; 

int main() 
{ 
    Base b, *bp; 
    Derived d, *dp; 

    b.print(); 
    d.print(); 
    bp = d; // why is this a conversion error? getting an error "cannot convert ‘Derived’ to ‘Base*’ in assignment" 

    bp = new B(); // this works fine... 

}  

這是否意味着我們只能分配一個動態將派生類對象分配給基類指針?爲什麼???

+0

「ap」在哪裏申報?這個代碼甚至不會編譯,因爲'ap'沒有聲明。向我們展示* actual *代碼。另外,你不能指定對象指針,你可以指定地址指針。你應該選擇一個[好書](http ://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 –

+0

我的壞...它是假設爲bp:( –

+0

+1爲構造良好的第一篇文章 –

回答

7

bp這裏是一個指針,你試圖給它分配一個對象。嘗試分配該對象的地址,而不是:bp = &d;

+0

+1因爲這麼快:) –

+0

@ w00te,我被騙了......我添加了C++標記。 –

+0

哈哈,鬼鬼祟祟的:) –

0

派生不是一個指針,它的一個對象。你需要得到該對象將其分配到一個指針的地址(持有地址!):

bp = &d; 

工作正常。

+0

感謝球員們的快速反應......得到了我犯的錯誤...... –