gpt4 book ai didi

visual-studio-2008 - boost::容器和错误: "C2679: binary ' =': no operator found"

转载 作者:行者123 更新时间:2023-12-04 00:44:09 24 4
gpt4 key购买 nike

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

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

我得到的错误是:
错误 C2679:二进制“=”:未找到采用“const test”类型的右侧操作数的运算符(或没有可接受的转换)
可能是 'test &test::operator =(test &)'
尝试匹配参数列表 '(test, const test)'

当使用普通 std::vector 而不是 boost::container 等效项时,代码会编译。我正在寻找为什么此代码无法编译以及如何使其编译的答案。

最佳答案

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

我们所观察到的行为似乎是为 boost 社区设计的并且是已知的:
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;
};

那些额外的类装饰可能确实很烦人,尤其是当代码库很大时。我不想花时间浏览代码并添加赋值运算符。

关于visual-studio-2008 - boost::容器和错误: "C2679: binary ' =': no operator found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14262885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com