一组结构化绑定错误,属于神经网络
Group of structured binding errors, pertains to neural networking
所以我下载了一个多年未使用的库,用于神经进化增强拓扑。基本上,一个进化的神经网络。它带有许多开箱即用的错误(大约 20-30 个错误),我设法修复了所有错误,除了这些:
错误 C3694 结构化绑定声明不能包含除 'static'、'thread_local'、'auto' 和 cv-qualifiers
以外的说明符
错误(活动)E2828 类型“float”没有要绑定的组件
错误(活动)E0413 不存在从“const std::tuple”到“float”的合适的转换函数 //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-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
。
所以我下载了一个多年未使用的库,用于神经进化增强拓扑。基本上,一个进化的神经网络。它带有许多开箱即用的错误(大约 20-30 个错误),我设法修复了所有错误,除了这些:
错误 C3694 结构化绑定声明不能包含除 'static'、'thread_local'、'auto' 和 cv-qualifiers
以外的说明符错误(活动)E2828 类型“float”没有要绑定的组件
错误(活动)E0413 不存在从“const std::tuple
错误(活动)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-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
。