【发布时间】:2014-08-26 09:08:22
【问题描述】:
以下是简化代码:
-------------class foo------------------------
class foo : private boost::noncopyable //--- mark 1---
{
BOOST_MOVABLE_BUT_NOT_COPYABLE(foo) //--- mark 2---
public:
/**
* Move constructor.
*/
foo(BOOST_RV_REF(foo) other);
/**
* Move-assignment.
*/
foo& operator=(BOOST_RV_REF(foo) other);
/**
* Releases
*/
~foo();
......
private:
fool_impl* m_pimpl;
}
foo::foo(foo_impl* pimpl)
:m_pimpl(pimpl)
{}
foo::foo(
BOOST_RV_REF(foo) other) : m_pimpl(other.m_pimpl)
{
other.m_pimpl = NULL;
}
foo& foo::operator=(
BOOST_RV_REF(foo) other)
{
if (&other != this)
{
delete m_pimpl;
m_pimpl = other.m_pimpl;
other.m_pimpl = NULL;
}
return *this;
}
foo::~foo()
{
delete m_pimpl;
}
---------------班级栏-----------
class bar
{
public:
explicit bar(BOOST_RV_REF(foo) other);
......
private:
foo m_foo;
};
bar::bar(BOOST_RV_REF(foo) other)
:
m_foo(other) //--- mark 3----
{}
用VS2010构建时,mark 3报错:
错误 C2248:“foo”:无法访问在“foo”类中声明的私有成员 1> 标记 1:见 'foo' 的声明 1> 标记 2:见 'foo' 的声明我试图修改一些代码,但没有用。 任何人都可以提供任何建议吗?谢谢。
@Piotr S。 感谢您的回答,我试过了,错误消失了,但是又出现了一个错误:
class test
{
public:
explicit test(
BOOST_RV_REF(foo) other);
private:
boost::shared_ptr<aClass> m_class;
};
test::test(BOOST_RV_REF(foo) other)
{
m_class = boost::make_shared<aClass>(boost::ref(other));
}
错误 LNK2019:未解析的外部符号“private: __cdecl foo(class foo const &)”在函数“class boost::shared_ptr __cdecl boost::make_shared const >(class boost::reference_wrapper const &&)”中引用
你能给点建议吗?谢谢!
【问题讨论】:
-
我从未使用过 Boost.Move,但我猜
BOOST_MOVABLE_BUT_NOT_COPYABLE并非设计用于与boost::noncopyable一起使用。 -
错误消息不完整 - 您没有显示错误是 哪个 私人成员。
-
我解决了这个问题:将 boost::ref 替换为 boost::move。
标签: c++ visual-studio-2010 boost move