2011-04-28 103 views
1

我想預定義派生類如下,預定義派生類

class Base{ 

} 

class Derived; 

class Unreleated{ 
    Base* ptr; 
public: 
    Unreleated& operator, (const Unreleated& m){ 
    static_cast<Derived*>(ptr); // pointer is a derived. 

    return *this; 
    } 


} 

class Derived : public Base{ 
//this is a container holding a bunch of unrelated. 
} 

,但我越來越無效靜態澆鑄從基地*派生*?

回答

3

Unreleated::operator,的定義移動到Derived的定義之後。

class Base{ 

}; 

class Derived; 

class Unreleated{ 
    Base* ptr; 
public: 
    Unreleated& operator, (const Unreleated& m); 

}; 

class Derived : public Base{ 
//this is a container holding a bunch of unrelated. 
}; 

    Unreleated& Unreleated::operator, (const Unreleated& m){ 
    static_cast<Derived*>(ptr); // pointer is a derived. 

    return *this; 
    } 
3

要從base-> child或child-> base static_cast這個關係必須在編譯之後被編譯器知道。

既然它確實是不相關的,那麼在定義基類和派生類以正確建立繼承關係之後,定義Unrelated類。

如果Derived實際上按價值持有一堆Unrelated,那麼您的循環依賴性無法解決。你將不得不重新考慮你的設計,讓它按你想要的方式工作。沒有更多的細節,很難進一步提供幫助。