我有一些代码给了我一些我们有结构的人
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}
    };
    }
不幸的是我的编译器抱怨在对行ID = {{"string","string2",true},
为什么是这样?他建议使用-std = c ++ 0x进行编译,但我的编译器(gcc 4.2)不支持这一点.是否有一种简单的方法来转换代码,使其有效?它为什么失败?
我使用的是Mac OSX,不想更新我的编译器
您的代码不是合法的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));
它为什么失败?
因为它不是有效的C++.这将是C++ 0x中.但到目前为止,它只是无效.并且由于您的编译器还不支持C++ 0x,您需要以困难的方式执行它,即一次将一个元素填充到一个元素,或者从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(Pair));
(这将要求algorithm和iterator标准的头.)
| 归档时间: | 
 | 
| 查看次数: | 15578 次 | 
| 最近记录: |