结构向量

新手上路,请多包涵

我有一些由另一个人给我的代码,其中我们有一个结构

struct Pair {
    string s1;
    string s2;
    bool equivalent;
  };

然后他设置了这些硬编码结构的向量

std::vector<Pair> PairID;

  staticdata() {
      PairID={{"string","string2",true},
      {"string","string3",true},
      {"string","string4",false},
      {"string","string7",false},
      {"string3","string8",false}
    };
    }

不幸的是,我的编译器在 PairID={{“string”,“string2”,true},

为什么是这样?他建议使用 -std=c++0x 进行编译,但我的编译器(gcc 4.2)不支持这个。有没有一种简单的方法可以转换代码以使其正常工作?为什么会失败??

我正在使用 Mac OSX,并且不想更新我的编译器

原文由 Robert 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 318
2 个回答

您的代码不是合法的 C++。它 合法的 C++0x,但语言发生了很多变化。因此,如果您想将此代码编译为 C++ 代码,则需要对其进行更改。

PigBen 的解决方案是一种方式,它的问题是临时数据可能会被多次构建和销毁,或者存在很长时间。

这是另一种方式:

     struct Pair {
        string s1;
        string s2;
        bool equivalent;
      };

    Pair make_Pair(const string& s1, const string& s2, bool equivalent)
    {
        Pair ret;
        ret.s1 = s1;
        ret.s2 = s2;
        ret.equivalent = equivalent;
        return ret;
    }

    // somewhere in the init code...
        std::vector<Pair> PairID;

   PairID.push_back(make_Pair("string","string2",true));
    PairID.push_back(make_Pair("string","string3",true));
    PairID.push_back(make_Pair("string","string4",false));
    PairID.push_back(make_Pair("string","string7",false));
    PairID.push_back(make_Pair("string3","string8",false));

原文由 John Dibling 发布,翻译遵循 CC BY-SA 2.5 许可协议

为什么会失败?

因为它在 C++11 之前不是有效的 C++。之后一些非常接近的东西 是有效的。但在 C++03 中,它只是无效的。而且由于您的编译器还不支持 C++11,因此您需要以一种艰难的方式来完成,即一次填充一个元素,或者从 C 数组中复制……:

 Pair data[] ={ {"string","string2",true},
    {"string","string3",true},
    {"string","string4",false},
    {"string","string7",false},
    {"string3","string8",false} };
PairID.assign(data, data + sizeof data / sizeof *data);

原文由 Konrad Rudolph 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题