无法找到错误,但编译器给出以下消息:

问题描述 投票:0回答:4

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

错误:

表达式不能用作函数lookup [i] [j] = max(lookup [i-1] [j],lookup [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]);
    }
  }
}


c++ syntax-error
4个回答
3
投票

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

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

1
投票

解决方案

如果可以使用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

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

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

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


1
投票

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

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

参考MIN and MAX in C

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

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

0
投票

问题是您想使用stl的“ max”函数,但是在开始时声明了一个名为max的变量。您应该改为调用std :: max或更改max变量的名称。通常,请避免使用std以避免这些错误

© www.soinside.com 2019 - 2024. All rights reserved.