【问题标题】:"Undeclared identifier" when trying to define function template尝试定义函数模板时出现“未声明的标识符”
【发布时间】:2021-12-24 22:31:58
【问题描述】:

我想定义一个函数来决定两个双精度数组是否(大约)相等。这是我的代码:

Comparisons.h :

#pragma once
#include <array>

const double EPSILON = 0.0001;

bool areFuzzyEqual(const double& d1, const double& d2);

template<int n>
bool fuzzyEquality((const std::array<double, n>)& a1, (const std::array<double, n>)& a2) {
    bool retVal = True;
    for (int i = 0; i < n; i++) {
        retVal &= areFuzzyEqual(a1[i], a2[i]);
    }
    return retVal;
};

当我尝试编译这个项目时,我得到了类似的错误

错误 C2065 'a1':未声明的标识符

错误 C3861 'a1':找不到标识符

我不明白这个错误来自哪里。它们是参数,我为什么需要定义它们?

【问题讨论】:

  • 另外,如果有人可以给我一个关于如何执行相同功能但使用流的提示,我将非常感激(例如使用 std::accumulate 但不必制作辅助数组 a1 - a2 )
  • 我不在编译器面前,但我的第一个猜测是括号括起不必要的参数。您应该查看完整的编译器输出以获取更多详细信息,而不是错误摘要窗口
  • 为什么要在类型周围加上括号?
  • 是括号,是的。我不知道他们为什么在那里

标签: c++ templates


【解决方案1】:

改写这一行

bool fuzzyEquality((const std::array&lt;double, n&gt;)&amp; a1, (const std::array&lt;double, n&gt;)&amp;a2)

作为

bool fuzzyEquality(const std::array&lt;double, n&gt;&amp; a1, const std::array&lt;double, n&gt;&amp; a2)

你应该很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多