【问题标题】:Unable the find the error but the compiler gives the following message:无法找到错误,但编译器给出以下消息:
【发布时间】:2020-04-12 08:24:57
【问题描述】:

错误消息说: 在函数void LCSlength(std::__cxx11::string, std::__cxx11::string, int, int)

错误:

表达式不能用作函数 查找[ i ][ j ] = max (查找[i - 1] [ j ],查找[ i ] [ j - 1 ]);


#define max 20

int lookup[max][max];

void LCSlength(string x,string y,int m,int n)
{
  for(int i = 1;i<=m;i++)
  {
    for(int j = 1;j<=n;j++)
    {
      if(x[i - 1] == y[j - 1])
       lookup[i][j] = lookup[i - 1][j - 1] + 1;
       else
        lookup[i][j] = max(lookup[i - 1][j], lookup[i][j - 1]);
    }
  }
}


【问题讨论】:

  • 如果您有一个为简洁起见没有显示的函数 max,那么您可以通过“#define max 20”删除对它的引用,并且您可能在其他地方声明的 max 函数无法访问。因为一旦预处理器指令运行,最后一行在编译器中看起来就像“lookup [i] [j] = 20(lookup[i-1][j],lookup[i][j-1]);”你不能有一个名为“20”的函数。在#define / 数组大小中使用“max”的替代标签,或创建或重命名 max 函数为其他内容
  • 您希望max 成为什么? 20 的占位符或返回两个值之间最大值的函数(或宏)的名称?前者可以使用MAX_SIZE,后者使用std::max

标签: c++ syntax-error


【解决方案1】:

使用std::max(lookup[i - 1][j], lookup[i][j - 1]); 并将您的宏名称替换为其他名称,例如maximum

#define maximum 20
int lookup[maximum][maximum];

【讨论】:

    【解决方案2】:

    解决方案

    如果你可以使用 C++11,请使用

    constexpr int max = 20;
    

    或者如果你不能使用 C++11 使用

    const int max = 20;
    

    并且不要跳过命名空间以避免歧义:

    lookup[i][j] = std::max(lookup[i - 1][j], lookup[i][j - 1]);
    

    说明

    你有一个宏

    #define max 20
    

    现在预处理器是一个非常愚蠢的文本替换工具,它现在会将“max”的每个实例替换为“20”。所以你最终得到了

    lookup[i][j] = 20(lookup[i - 1][j], lookup[i][j - 1]);
    

    这没有任何意义。为什么你不应该在现代 C++ 中使用宏的主要例子;)

    【讨论】:

      【解决方案3】:

      你需要定义max函数或者像这样使用宏

      #define MAX(a,b) ((a) > (b) ? (a) : (b))
      

      参考MIN and MAX in C

      编辑 预处理器区分大小写,建议使用大写字母。只是为了正确答案,我将它们放在小型大写字母中。您也可以使用函数。

      #define max(a,b) ((a) > (b) ? (a) : (b))
      

      【讨论】:

        【解决方案4】:

        问题是你想使用stl的“max”函数,但是你在开头声明了一个叫max的变量。 您应该改为调用 std::max 或更改 max 变量的名称。 一般来说,避免使用 std 来避免这些错误

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-06
          • 1970-01-01
          • 2012-12-19
          • 2012-10-21
          • 2017-05-06
          • 1970-01-01
          • 1970-01-01
          • 2012-02-17
          相关资源
          最近更新 更多