Не удается найти ошибку, но компилятор выдает следующее сообщение: - PullRequest
0 голосов
/ 12 апреля 2020

Сообщение об ошибке гласит: В функции void LCSlength(std::__cxx11::string, std::__cxx11::string, int, int)

Ошибка:

выражение не может использоваться в качестве функции lookup [i] [j] = max (lookup [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]);
    }
  }
}


Ответы [ 4 ]

3 голосов
/ 12 апреля 2020

Используйте std::max(lookup[i - 1][j], lookup[i][j - 1]); и замените имя макроса чем-то другим, скажем maximum:

#define maximum 20
int lookup[maximum][maximum];
1 голос
/ 12 апреля 2020

Решение

, если вы можете использовать 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 ++;)

1 голос
/ 12 апреля 2020

Вам необходимо определить функцию max или использовать макрос следующим образом

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

см. MIN и MAX в C

Редактировать Препроцессоры чувствительны к регистру и рекомендуется хранить их заглавными буквами. Просто для правильного ответа я помещаю их в маленькие заглавные буквы. Вы также можете использовать функцию.

#define max(a,b) ((a) > (b) ? (a) : (b))
0 голосов
/ 12 апреля 2020

Проблема в том, что вы хотите использовать функцию "max" в stl, но вы объявили переменную с именем max в начале. Вместо этого вы должны вызвать std :: max или изменить имя вашей переменной max. В общем, избегайте использования std, чтобы избежать этих ошибок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...