Простая ошибка вектора / указателя C

#c #pointers #vector

#c #указатели #вектор

Вопрос:

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

У меня есть класс с именем ‘pointList’. В заголовочном файле у меня есть следующее:

 public:
    PointList();

private:
    std::vector< Point* > *pl;
  

В файле .cpp у меня есть следующее:

 PointList::PointList()
{
    pl = new vector< Point* >();
}
  

Это не компилируется.

Ожидаемый спецификатор типа перед ‘vector’
Не может преобразовать ‘int *’ в ‘std::vector <*’ в
ожидаемом присваивании ‘;’ перед ‘vector’

Что дает?

Комментарии:

1. Кроме того, если вы давно не знакомы с C , вы можете рассмотреть возможность использования shared_ptr вместо необработанных указателей. Хотя у людей разные мнения по этому поводу: p.

2. Я не видел ни одного, кто выступает против умных указателей и все еще знает, о чем он / она говорит..

3. Действительно. Но я видел дебаты о согласованности кэша в жестких алгоритмах — особенно при распределении количества ссылок на указатель. Лично я в наши дни вообще не использую необработанные указатели.

Ответ №1:

Используете ли вы using объявления. Если нет, вам нужно добавить префикс vector with namespace std:: в ваш cpp-файл

Комментарии:

1. Вещи не становятся намного проще, чем это. Спасибо. Я приму это, когда мне разрешат через 9 минут.

Ответ №2:

Вам нужно указать векторное пространство имен:

 PointList::PointList()
{
    pl = new std::vector< Point* >();
}
  

И не злоупотребляйте указателями в C . Скорее всего, член pl не обязательно должен быть указателем.

Если вам нужна коллекция (вектор, список и т. Д.) полиморфных типов, взгляните на Boost .PointerContainer