Как вытащить ссылку из указателя? - PullRequest
1 голос
/ 11 октября 2011

Прости меня, так как мой C ++ очень ржавый.Но я в затруднении.Я пытаюсь создать собственный список, в котором есть методы, которые возвращают больше всего фронта, и большинство предметов назад.

ElementType& front() throw(string*)
{
   if (empty())
      throw new string("Empty Vector");
   else
      return(first)
}

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

ElementType& *first

или

&*first

, но я не могу заставить их играть красиво.Любой совет будет принята с благодарностью.

Ответы [ 4 ]

4 голосов
/ 11 октября 2011

Если first - указатель на ваш элемент, *first даст вам ссылку на него.

1 голос
/ 11 октября 2011
int& intRefFunction() {
  static int intValue = 42;
  static int* intPointer = &intValue;
  return *intPointer;
}
0 голосов
/ 11 октября 2011

ElementType& *first

Не законно.У вас не может быть указателя на ссылку.

Просто разыщите указатель, и у вас будет ссылка на него.

Пример, предполагая, что first является указателем:

ElementType& r(*first)
return r
0 голосов
/ 11 октября 2011
ElementType& *first

Объявляет переменную first как, я думаю, указатель на ссылку на ElementType объект. Я не уверен, что это даже допустимый C ++.

&*first

Если вы вернете это, вы вернете адрес разыменованного объекта, на который указывает указатель first, что, как я считаю, равносильно возвращению first.

Если first - указатель на первый элемент ElementType, просто верните разыменованный объект как *first.

Кстати, это не единственная вещь, которая выглядит неправильно в вашем коде. Я не думаю, что бросать строковые указатели - это хорошая практика (бросать объект, полученный из std::exception, такой как std::out_of_range), и не включать спецификацию исключений (это приводит к ненужным накладным расходам). Так что вы, вероятно, после чего-то более похожего:

ElementType& front()
{
   if (empty()) {
      throw std::out_of_range("Empty Vector");
   }
   return *first;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...