所以我下载了一个多年未使用的库,用于神经进化增强拓扑。基本上,一个不断进化的神经网络。它有很多很多的错误(大约20-30个),我设法修复了它们,除了这些:
错误C3694结构化绑定声明不能包含除'static', 'thread_local', 'auto'和cv-qualifiers之外的任何说明符
Error (active) E2828 type "float"没有要绑定到
的组件错误(激活)E0413没有合适的转换函数从"const std::tuple<float,>";float"Exists//this is dataset
错误(活动)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, where all the errors are
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-限定符),因此将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
。