#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