C ++ передать по ссылкам? - PullRequest
       9

C ++ передать по ссылкам?

0 голосов
/ 19 сентября 2018

Я получаю некоторые ошибки, которые я не знаю, как исправить.Кажется, у меня возникают проблемы с правильной передачей моих параметров в функцию-член класса в List.h.Как я могу это исправить?Ограничения: я не могу изменить параметры или тип возвращаемого значения is_equal.

Demo.cpp:60:38: error: no matching function for call to ‘List<std::__cxx11::basic_string<char> >::is_equal(List<std::__cxx11::basic_string<char> >*&)’
bool random = list2->is_equal(list3);
                                  ^
In file included from Demo.cpp:1:
List.h:339:8: note: candidate: ‘bool List<T>::is_equal(const List<T>&) const [with T = std::__cxx11::basic_string<char>]’
bool is_equal(const List<T> &other) const
    ^~~~~~~~
List.h:339:8: note:   no known conversion for argument 1 from ‘List<std::__cxx11::basic_string<char> >*’ to ‘const List<std::__cxx11::basic_string<char> >&’

Мой код для вызова is_equal в Demo.cpp:

List<string> *list2 = new List<string>();
List<string> *list3 = new List<string>();

// code to add values to list2 and list3

bool random = list2->is_equal(list3);    // line 60

Функция is_equal в List.h:

/**
 *   description:  returns true if calling List and parameter
 *      List other contain exactly the same sequence of values.
 *      Returns false otherwise.
 *
 *  REQUIRMENT:  Linear runtime (O(n) where n is MIN(len1,len2)
 *    and len1 and len2 are the respective lengths of the two lists.
 **/
bool is_equal(const List<T> &other) const    // line 339
  {
    Node *p = front;
    int pLength = 0;
    int otherLength = 0;
    while (p != nullptr) {
      pLen++;
      p = p->next;
    }
    while (other != nullptr) {
      otherLen++;
      other = other->next;
    }
    if (pLen == otherLen)
      return true;
    return false;
  }

1 Ответ

0 голосов
/ 19 сентября 2018

Вы пытаетесь передать указатель List * там, где ожидается ссылка const List &.Просто разыменуйте указатель для доступа к объекту, на который указывает указатель, чтобы ссылка могла привязаться к этому объекту:

bool random = list2->is_equal(*list3);

В противном случае, не используйте new для динамического выделения объектов List в первомместо:

List<string> list2;
List<string> list3;
...
bool random = list2.is_equal(list3);
...