我有一个
struct OpDesc {
std::string OPName;
size_t OPArgsMin;
bool IsVaribaleArgsNum;
bool IsOPChange;
std::string ChangeNodeOP;
std::string ChangeNodeLabel;
bool IsOPDelete;
const char* ErrMsg;
};
并想初始化一个 std::map<string, OpDesc>
.
我试过这样做:
typedef std::map<std::string,struct OpDesc> OpDescMap;
OpDescMap opDesc;
opDesc["StoreOp"] = {"StoreOp",2,false,false,"","",false,""};
/// etc.
我无法用 VS10 编译它。我得到:error C2059: syntax error : '{'
如何解决?
最佳答案
您的语法是有效的 C++11(请参阅 Uniform Initialization),但是,VS10 不支持它。它仅被添加到 VS12(参见 C++ features in VS2012)。一种选择是将您的编译器升级到更符合 C++11 的编译器。
如果无法升级,则必须回退到 C++03 语法。您可以使用中间变量:
OpDesc op = {"StoreOp", 2, false, false, "", "", false, ""};
opDesc[op.OPName] = op;
或者在你的结构中添加一个构造函数:
struct OpDesc {
// ... all fields
OpDesc(std::string const& opName, size_t opArgsMin, bool isVariableArgsNum,
bool isOpChange, std::string const& changeNameOp,
std::string const& changeNodeLabel, bool isOpDelete,
char const* errMsg)
: OPName(opName), OPArgsMin(opArgsMin), IsVariableArgsNum(isVariableArgsNum),
IsOpChange(isOpChange), ChangeNameOp(changeNameOp),
ChangeNodeLabel(changeNodeLabel), IsOpDelete(isOpDelete),
ErrMsg(errMsg) {}
};
opDesc["StoreOp"] = OpDesc("StoreOp", 2, false, false, "", "", false, "");
关于c++ - 使用字符串键初始化结构映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667710/