Ошибка: инициализация аргумента 1 из

Я осмотрелся и увидел довольно много из них, но ни один из них не дал решения моей проблемы. Я получаю эту ошибку компиляции с помощью следующего кода:

ОШИБКА:

КОД:

const int TOP_WORDS = 25;

...

void topWords(Hash t, string word, string topA[]); 

int main()
{
    ...
    Hash table1;
    string word = "example";

    string topWordsArr[TOP_WORDS];

    table1.addItem(word);
    topWords(table1, word, topWordsArr);

    ...
}

...

void topWords(Hash t, string word, string topA[])
{
    int i = 0;
    int tempCount = t.itemCount(word);
    int tempCount2 = t.itemCount(topA[i]);

    while (tempCount > tempCount2 && i < TOP_WORDS) {
        i++;
        tempCount2 = t.itemCount(topA[i]);
    }

    if (i > 0)

Все остальные сообщения, которые я видел об этой ошибке, содержали неправильный синтаксис с объявлением / передачей параметра массива строк, но я дважды и трижды проверил все это, и я уверен, что это правильно; хотя я был неправ раньше..

1 ответ

Решение

Используя мой хрустальный шар:

  • Вы передаете Hash по значению
  • это требует конструктора копирования,
  • у вас его нет (или он испорчен, частный или явный)

Итак, возьмите Hash по ссылке

void topWords(Hash const& t, std::string const& word, std::string* topA); 

Также,

  • string[] это не тип в C++
  • не использовать using namespace std;
  • не используйте сырые массивы; использование std::vector<std::string> (или же std::array<std::string, N>)
Другие вопросы по тегам