如何修改C++类的setTrainSet函数以支持直接传入vector变量
问题分析与解决
首先明确:你现有的setTrainSet函数本来就支持直接传入vector变量,比如testNet.setTrainSet(vector);——只要vector是std::vector<std::vector<double>>类型,直接调用即可,不需要修改函数。
你当前的调用写法存在语法错误:std::vector<std::vector<double>>() = { ... }试图给临时对象赋值,这不符合C++语法规范。
如果想要同时支持直接传入初始化列表(不用显式构造vector),可以给setTrainSet添加一个重载版本:
// 原有的const引用版本,支持传入已有变量 void setTrainSet(const std::vector<std::vector<double>>& trainSet) { this->trainSet = trainSet; } // 新增的初始化列表重载,支持直接传{}形式的数据 void setTrainSet(std::initializer_list<std::initializer_list<double>> initList) { this->trainSet.assign(initList.begin(), initList.end()); }
修改后两种调用方式都能正常工作:
- 传入已有变量:
std::vector<std::vector<double>> myVector = {{1.0,1.0,0.73}, ...}; testNet.setTrainSet(myVector);
- 直接传入初始化列表:
testNet.setTrainSet({ {1.0, 1.0, 0.73}, {1.0, 1.0, 0.81}, {1.0, 1.0, 0.86}, {1.0, 1.0, 0.95}, {1.0, 0.0, 0.45}, {1.0, 1.0, 0.70}, {1.0, 0.0, 0.51}, {1.0, 1.0, 0.89}, {1.0, 1.0, 0.79}, {1.0, 0.0, 0.54} });
如果你不想新增重载,也可以修正原有的调用方式,直接用初始化列表构造临时对象(去掉错误的赋值操作):
testNet.setTrainSet(std::vector<std::vector<double>>{ {1.0, 1.0, 0.73}, {1.0, 1.0, 0.81}, {1.0, 1.0, 0.86}, {1.0, 1.0, 0.95}, {1.0, 0.0, 0.45}, {1.0, 1.0, 0.70}, {1.0, 0.0, 0.51}, {1.0, 1.0, 0.89}, {1.0, 1.0, 0.79}, {1.0, 0.0, 0.54} });
内容的提问来源于stack exchange,提问作者Nir4s
相关产品推荐
相关产品推荐

