[英]boost::shared_ptr - composition relation between two classes
假設我有:
為了實現這一點,在C ++ I中:
下面給出一個代碼示例。
#include "boost/scoped_ptr.hpp"
class C
{
public:
C() {}
private:
};
class P
{
public:
P() : childC(new C()) {}
private:
boost::shared_ptr<C> childC;
};
int main(int argc, char** argv)
{
P p;
}
不知何故,我無法構建這個簡單的代碼示例,並且我不明白為什么(我是編程的新手)。
錯誤:
類“ P”沒有任何名為“ childC”的字段
預期的';' 在“ <”令牌之前
無效使用'::'
ISO C ++禁止聲明無類型的“ shared_ptr”
造成錯誤的最可能原因是您包含了boost/scoped_ptr.hpp
,並且試圖聲明一個boost::shared_ptr
。 這里不太可能需要boost::shared_ptr
。
在這種情況下,表達成分的最簡單方法是
class C {};
class P
{
private:
C c_;
};
現在,您可能希望通過使用僅要求C
的前向聲明的慣用法來減少編譯時的依賴性,在這種情況下P
的標頭可能是
#include <boost/scoped_ptr.hpp>
class C; // forward declaration
class P
{
public:
P() : c_(new C()) {}
private:
boost::scoped_ptr<C> c_;
};
正如KerrekSB在注釋中所暗示的那樣,您使用了shared_ptr
,但包含了scoped_ptr
。 區別在於, scoped_ptr
表示排他所有權(此處是這種情況),而shared_ptr
表示共享所有權(並非如此)。 首選的慣用法是在代碼中使用scoped_ptr
。
如果您絕對要使用shared_ptr,請包含標題<boost/smart_ptr/shared_ptr.hpp>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.