我有两个班级,分别为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
但为了简单起见,我没有在这里提到它
然而,当我试图建立程序出现错误
In instantiation of ‘typename boost::detail::sp_if_not_array::type boost::make_shared() [with T = bar; typename boost::detail::sp_if_not_array::type = boost::shared_ptr]’:| /home/..../Projects/CodeBlocks/../bar.cpp|18|required from here| /home/..../Projects/CodeBlocks/../foo.h|23|error: ‘foo::foo()’ is private| ||=== Build finished: 1 errors, 2 warnings (0 minutes, 5 seconds) ===|
是因为bar.h首先建成?如果是这样,关于如何解决这个问题的任何建议?
'bar'可能是'foo'的朋友,但'boost :: make_shared'不是。直接使用'boost :: shared_ptr'构造函数。 – Praetorian 2014-12-03 05:36:11