错误消息说:在功能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]);
}
}
}
使用std::max(lookup[i - 1][j], lookup[i][j - 1]);
,然后用其他名称替换您的宏名称,例如maximum
:
#define maximum 20
int lookup[maximum][maximum];
如果可以使用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 ++中使用宏的主要示例;)
您需要定义max函数或像这样使用宏
#define MAX(a,b) ((a) > (b) ? (a) : (b))
编辑预处理程序区分大小写,建议使用大写字母。只是为了正确答案,我将它们放在小写字母。您也可以使用一个函数。
#define max(a,b) ((a) > (b) ? (a) : (b))
问题是您想使用stl的“ max”函数,但是在开始时声明了一个名为max的变量。您应该改为调用std :: max或更改max变量的名称。通常,请避免使用std以避免这些错误