#c #pointers #vector
#c #указатели #вектор
Вопрос:
Я создаю вектор указателей, входящих в class Location, внутри class Location, поэтому:
class Location //(simplified to prevent long code)
{
private:
std::string name, description;
int id;
std::vector<Item> items;
public:
Location();
~Location();
std::vector<Location*> nextLocations; //vector of pointers
};
Почему мой код компилируется с
std::vector<Location*> nextLocations;
но не с
std::vector<Location> *nextLocations;
В чем разница? Я думал
int* i;
и
int *i;
были ли они одинаковыми? Разве вектор не остается вектором указателей местоположения в любом случае? Моя функция-член в классе Location, названная addLoc(), не работает, если параметр не принимает адрес местоположения, а затем выполняет push_back для nextLocations. Но когда я push_back, почему я должен использовать
nextLocations.push_back(amp;location);
и не
nextLocations->push_back(amp;location);
разве каждый элемент nextLocations не должен быть указателем?
Комментарии:
1. Поскольку они означают разные вещи,
std::vector<Location*> nextLocations;
это вектор указателей на объекты Location,std::vector<Location> *nextLocations;
это указатель на вектор объектов Location.int *i
иint* i
то же самое, потому что это просто пробелы, в векторном случае это не так….
Ответ №1:
Да, int* i;
ans int *i;
— это одно и то же. Однако, например, что-то за скобками (или что-то эквивалентное) не совпадает. Итак,
myfunc(i) 7;
это не то же самое, что
myfunc(i 7);
Подумайте о <>
подобных скобках. Таким образом:
std::vector<Location *> nextLocations;
это не то же самое, что:
std::vector<Location> *nextLocations;
Если вы не понимаете, в чем разница, первый — это вектор указателей местоположения. Второй — это указатель на вектор местоположений, который, опять же, не совпадает. Убедитесь, что вы выбрали правильный :