Вы хотите вектор Location
с? Или вы хотите вектор указателей на Location
с? Вам нужно выбрать один и придерживаться его.
Причина, по которой он показывает ссылку, состоит в том, что если бы он показывал только значение, это означало бы, что вы не могли бы вызвать функцию, которая берет ссылку, поскольку ссылка может появиться слева от знака равенства, а значение не может , То, что вы передали в функцию , может появиться слева от знака равенства, поэтому, если вы укажете символ &, сообщение об ошибке станет менее информативным. (Предположим, возможно, вашей ошибкой было передать значение, где требовалась изменяемая ссылка.)
Рассмотрим:
int f1(int &j) { j++; return 3; }
int f2(int j) { return j+1; }
int q;
f1(3); // not legal, we are passing an 'int' value and need an 'int' reference
f2(3); // legal, passing an 'int' value function needs an 'int' value
f1(q); // legal, we are passing an 'int&', function need an 'int&'
f2(q); // legal, reference can be demoted to value
Поэтому, когда вы передаете lvalue (то, что может появиться слева от знака равенства), вы действительно вызываете функцию со ссылкой - что-то более мощное, чем простое значение.