LINUX.ORG.RU

Не определяет как класс string


0

1

Всем доброго времени суток. Не могу разобраться в чем проблема. Читал документацию про класс string. Не получается применить на практике метод find.

В классе data определен как «vector<string> data;»

void Ls::defineDepth()
{
  for (int counter = 0; counter < numOfDir; counter++)
    {
      string::size_type pos;
      string buff  = data[ counter ];
      int branchDepth = 0;
      stepIn(&branchDepth, &buff, &pos);
      cout << branchDepth;
    }
}

int Ls::stepIn(int *deep, string *buff, string::size_type *pos)
{
  *pos = *buff.find("/", 0); // <----- ERROR
  *buff = *buff.substr(*pos); // <------ ERROR
  cout << buff << endl;
  if (*pos != string::npos)
    stepIn(deep++, buff, pos);
  else
    return *deep;
}

Ошибка такого рода: error: request for member 'find' in 'buff', which is of non-class type 'std::string* {aka std::basic_string<char>*}'

У оператора доступа (.) более высокий приоритет, чем у оператора разыменования. Правильно будет так:

(*buff).find("/", 0)
или так:
buff->find("/", 0)

reader ()
Ответ на: комментарий от reader

>(*buff).find(«/», 0)

buff->find(«/», 0)

вообще-то это разные вещи, ибо operator->() может быть перезагружен (хотя вроде в string это вроде и не так _сейчас_)

А вот точку перезагружать нельзя.

drBatty ★★ ()
Ответ на: комментарий от drBatty

>вообще-то это разные вещи, ибо operator->() может быть перезагружен

Вообще-то одинаковые, если имплементор, перегрузивший operator->, не поленится так же перегрузить и operator*. В противном случае - отрывать руки за нарушение семантики

yoghurt ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.