我下载了一个多年未使用的库,用于神经进化增强拓扑(Neural Evolutionary Augmenting Topologies)。这是一个会进化的神经网络。它自带了很多错误(大概20到30个),我设法修复了所有错误,除了这些:
错误 C3694 结构化绑定声明中只能包含 ‘static’、’thread_local’、’auto’ 和 cv-qualifiers 等限定符
错误(活动)E2828 类型 “float” 没有可绑定的组件
错误(活动)E0413 从 “const std::tuple<float, float, float>” 到 “float” 的转换函数不存在 //这是数据集
错误(活动)E2825 结构化绑定声明中的无效限定符
以下是出现错误的代码:
const int x1 = 1;const int x2 = 2;const int y = 1;static constexpr int NumInput = 2;static constexpr int NumOutput = 1;static constexpr bool Bias = true;static constexpr float ThresholdFitness = 0.80f;static constexpr std::size_t PopulationSize = 100;using ParamConfig = EvolutionNet::DefaultParamConfig;using EvolutionNetT = EvolutionNet::EvolutionNet<NumInput, NumOutput, Bias, ParamConfig>;using Network = EvolutionNetT::NetworkT;using FitnessScore = EvolutionNet::FitnessScore;for (float&& [x1, x2, y] : dataset) { // const auto, 所有错误都在这里 network->setInputValue(0, x1); network->setInputValue(1, x2); network->feedForward<ParamConfig>(); const float output = network->getOutputValue(0); assert(output >= 0.f && output <= 1.f); score += 1.f - (std::abs(output - y)); }
我对结构化绑定一无所知,我只是想在其他项目中使用一些神经网络。这个东西文档不是很好,但我认为这只是一个for-each循环,除非结构化绑定与此有关。如何修复这些错误?谢谢你。
回答:
正如错误消息所说,结构化绑定中只允许使用 auto
类型限定符(和 cv-qualifiers),所以请将 float&&
替换为 auto&&
。
如果你对这种语法感到不舒服,你也可以不使用它。这只是语法糖。你可以使用 std::get
来访问 std::tuple
的各个元素的值,例如:
for(auto entry : dataset) { auto x1 = std::get<0>(entry); auto x2 = std::get<1>(entry); auto y = std::get<2>(entry); //...}
或者,如果你喜欢,你可以写出具体的类型而不是使用 auto
。如果你想要元组中元素的引用而不是它们的值,请在适当的地方添加 &&
/&
/const
。