Почему в этом случае разница в расположении звездочек, а в других нет? - PullRequest
0 голосов
/ 08 апреля 2019

Я создаю вектор указателей члена класса Location, внутри класса 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(&location);

а не

nextLocations->push_back(&location);

не каждый элемент nextLocations должен быть указателем?

1 Ответ

2 голосов
/ 08 апреля 2019

Да, int* i; и int *i; - это одно и то же.Однако, например, что-то вне скобок (или что-то эквивалентное) не то же самое.Итак,

myfunc(i) + 7;

- это не то же самое, что

myfunc(i + 7);

Думайте о <> как о скобках.Таким образом:

std::vector<Location *> nextLocations;

- это не то же самое, что:

std::vector<Location> *nextLocations;

Если вы не уверены, в чем разница, первым является вектор указателей местоположения.Второй - указатель на вектор Locations, что, опять же, не то же самое.Убедитесь, что вы выбрали правильный:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...