所以我下载了一个多年未使用的库,用于神经进化增强拓扑。基本上,一个进化的neural network。它带有许多开箱即用的错误(大约 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, 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));
}
我对结构化绑定一无所知,我只是想能够将一些神经网络用于其他项目。这件事不是最好的记录,但我相信这只是为了每个循环,除非结构化绑定与此有关。如何解决这些错误?谢谢你。
回答1
正如错误消息所说,结构化绑定中只允许使用 auto
类型说明符(和 cv 限定符),因此将 float&&
替换为 auto&&
。
如果你对这种语法感到不舒服,你不需要使用它。它是纯粹的语法糖。您可以使用 std::get
访问 std::tuple
的各个元素的 values,例如:
for(auto entry : dataset) {
auto x1 = std::get<0>(entry);
auto x2 = std::get<1>(entry);
auto y = std::get<2>(entry);
//...
}
或者,如果您愿意,您可以写出类型,而不是 auto
。如果您想要引用元组中的元素而不仅仅是它们的 values,请在适当的地方添加 &&
/&
/const
。