VS говорит "Слишком мало аргументов ...", но другие компиляторы дают мне правильный вывод? - PullRequest
0 голосов
/ 13 апреля 2019

Я делаю правку-расстояние между двумя строками. Использует рекурсивную функцию. Онлайновые компиляторы компилируют код и дают мне вывод 3, что правильно, но Visual Studio говорит: «Слишком мало аргументов в вызове функции». Может, кто-то еще поможет?

Я посмотрел на другие потоки, и они действительно пропустили аргументы, но я этого не делаю, но VS помечает мой рекурсивный вызов

#include<iostream> 
#include<string>
using namespace std;


int min(int x, int y, int z)
{
return min(min(x, y), z); // here VS flags error
}

int editDist(string str1, string str2, int m, int n)
{

if (m == 0) return n;


if (n == 0) return m;

if (str1[m - 1] == str2[n - 1])
    return editDist(str1, str2, m - 1, n - 1);

return 1 + min(editDist(str1, str2, m, n - 1),    
    editDist(str1, str2, m - 1, n),   
    editDist(str1, str2, m - 1, n - 1)
);
}


int main()
{
string str1 = "sunday";
string str2 = "saturday";

cout << editDist(str1, str2, str1.length(), str2.length());

return 0;
 }

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

Проблема связана с тем, что имя вашей функции соответствует стандартной минимальной функции std::min

int min(int x, int y, int z){
    return min(min(x, y), z); // the compiler is getting confused over whether to 
    //call std::min which takes two parameters or user-defined min which 
    //takes three parameters
    }

Измените имя функции, и оно должно работать нормально.

1 голос
/ 13 апреля 2019

Поскольку вы используете std::min, вам нужно использовать #include <algorithm>.

Если это работает на некоторых компиляторах, это потому, что вам повезло, и некоторые из используемых вами заголовков включают <algorithm> (возможно, косвенно).

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