【问题标题】:boost::interprocess : Creating and inserting elements to a vector of structs (C++03)boost::interprocess : 创建元素并将其插入到结构向量 (C++03)
【发布时间】:2023-04-01 20:53:01
【问题描述】:

我在使用 msvc2008 在 boost::interprocess 中创建复杂结构向量时遇到问题。之前提出的问题的答案(下面的链接)提供了一些解决方案,但它们都不适用于 msvc2008。错误类型始终相同:

error: no match for ‘operator=’ (operand types are ‘complex_data’ and ‘const complex_data’) 

之前关于该问题的问题:

Shared memory Vectors in boost with

How to I create a boost interprocess vector of interprocess containers?

建议的解决方案:

http://coliru.stacked-crooked.com/a/10000376928990e2

http://coliru.stacked-crooked.com/a/3d6582c2d59015d2

注意:我知道我应该迁移到较新版本的 Visual Studio。但遗憾的是,我目前卡在 msvc2008 上。

【问题讨论】:

  • 您应该考虑升级到更新的工具。
  • 你不说? (尼古拉斯凯奇模因讽刺地盯着你)。开个玩笑,我们的重要工具之一是不可升级的。所以我现在有点坚持。
  • 所以你被 Visual Studio 2008 困住了??
  • 是的,我们说的这个工具(可以说是一个库)是用msvc2008编译的。所以我应该用 msvc2008 编译器编译我的项目。
  • 只是一个想法:决定是否应该购买现代开发工具的人应该考虑您花在搜索解决方案上的时间与现代开发工具的成本+现代工具的额外好处..

标签: c++ boost c++03 interprocess


【解决方案1】:

在不知道您的实际代码的情况下,您似乎应该为您的类型添加 operator=,因为 MSVC 无法生成它 (?)。

//Other members...
complex_data& operator=(complex_data const&) = default;

或者,如果编译器不接受该提示,则以老式方式定义主体:

complex_data& operator=(complex_data const& rhs) {
    id_ = rhs.id_;
    char_string_ = rhs.char_string_;
    int_vector_ = rhs.int_vector_;
    return *this;
}

【讨论】:

  • 您可以考虑我在问题中给出的第一个建议解决方案是我正在尝试编译的确切代码。实际上,我认为这很棒,因为这是您的解决方案。但我看到你说你不能重现错误。
  • 这很奇怪,你想用 Visual Studio 2008 编译吗?
  • 我没有说我不能复制它。我不会尝试。我可以查看代码示例并想象 MSVC 需要什么提示 - 这是我的答案。您的评论让我感到困惑,因为 "first suggested solution [you] gave in the question" 甚至不包含错误消息中提到的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多