C++类模板实例化出现"required from here"报错该如何解决?
问题原因说明
- 你看到的
required from here不是错误内容,是编译器输出的警告上下文提示,用来告诉你这条警告对应的代码触发位置是frank对象实例化的行。 - 编译输出的3条
-Wreorder警告是你当前代码的唯一问题:C++规定类成员的初始化顺序严格遵循类内声明的先后顺序,和构造函数初始化列表的书写顺序无关。你代码里类内先声明了std::string name,再声明了T value,但是构造函数初始化列表里先初始化value再初始化name,编译器担心你有依赖初始化顺序的隐藏逻辑bug,因此抛出警告。 - 你给出的编译日志中没有实际的错误信息,构建日志末尾标注的1个错误大概率是IDE或者构建脚本的计数异常,当前你提供的代码可以正常编译运行,仅存在上述警告。
修复方案
调整构造函数初始化列表的顺序,和类内成员声明顺序保持一致即可消除警告:
// 修改前 Data(std::string n, T v) : value {v}, name {n} // 修改后 Data(std::string n, T v) : name {n}, value {v}
不推荐直接关闭
-Wreorder警告,该警告可以有效避免因初始化顺序错误导致的野指针、未初始化访问等隐藏问题。
内容的提问来源于stack exchange,提问作者ligin pc
相关产品推荐
相关产品推荐

