boost :: containers和错误:“C2679:binary'=':找不到运算符”

时间:2013-01-10 16:41:23

标签: visual-studio-2008 visual-c++ boost

我正在尝试在Visual Studio 2008下编译以下代码:

struct test
{
    boost::container::vector<int> v1;
};
test v1, v3;
const test & v2 = v3;
v1 = v2;

我得到的错误是:
错误C2679:二进制'=':找不到带有'const test'类型右手操作数的运算符(或者没有可接受的转换)
可能是'test&amp; test :: operator =(test&amp;)' 在尝试匹配参数列表'(test,const test)'

当使用普通的std :: vector而不是boost :: container等效时,代码编译。我正在寻找答案为什么这段代码不能编译以及如何编译它。

1 个答案:

答案 0 :(得分:3)

我发现了一个类似的问题: boost::container::vector fails to compile with C++03 compiler

我们观察到的行为似乎是为促进社区设计和了解的: Boost::move emulation limitations章“派生于或保留可复制和可移动类型的类中的赋值运算符”。

为了使主要问题中显示的代码能够工作,必须使用BOOST_COPYABLE_AND_MOVABLE宏将类声明为可复制和可移动的。此外,还需要明确定义复制赋值的const版本。更正了C ++ 03编译器的代码版本:

class test
{
private:
    BOOST_COPYABLE_AND_MOVABLE( test );
public:
    test& operator=(BOOST_COPY_ASSIGN_REF(test) p) // Copy assignment
    {
        v1 = p.v1;
        return *this;
    }
    boost::container::vector<int> v1;
};

这些额外的类装饰可能确实变得烦人,特别是当代码库很大时。浏览代码并添加赋值运算符不是我想花时间的事情。