【发布时间】:2014-12-03 05:31:09
【问题描述】:
我有两个班级,分别是 foo 和 bar。 foo的构造函数是private,所以只允许bar类实例化它。
// foo.h
class foo
{
friend class bar;
private:
foo()
{}
};
// bar.h
class bar
{
public:
bar()
{
foo* f = new foo();
}
};
我也使用boost::shared_ptr,但为简单起见,我在这里没有提及
但是,当我尝试构建程序时,我得到了错误
在实例化'typename boost::detail::sp_if_not_array::type boost::make_shared() [with T = bar;类型名称 boost::detail::sp_if_not_array::type = boost::shared_ptr]':| /home/../Projects/CodeBlocks/../bar.cpp|18|从这里需要| /home/../Projects/CodeBlocks/../foo.h|23|error: ‘foo::foo()’ 是 私人| ||=== 构建完成:1 个错误,2 个警告(0 分钟,5 秒)===|
是因为 bar.h 是先构建的吗?如果是这样,有什么建议可以解决这个问题吗?
【问题讨论】:
-
bar可能是foo的朋友,但boost::make_shared不是。直接使用boost::shared_ptr构造函数。
标签: c++ boost shared-ptr friend boost-smart-ptr