У меня есть вектор указателей, и я пытаюсь перегрузить операционный оператор, чтобы упростить печать. Однако я не могу заставить функцию вызываться. Вот мой код:C++ Оператор перегрузки << для работы с вектором указателей
std::vector<Set*> sets;
for (int i = 0; i < sets.size(); i++) {
std::cout << sets[i] << std::endl;
}
std::ostream& operator<<(std::ostream& out, const Set* s) {
//Print set code
}
Я перебрать все наборы и вызвать определенный набор для печати, поставив множества [я] в ostream, но функция не вызывается. Он просто печатает адрес наборов [i]. Я работал, когда у меня был вектор Set, но когда я попытался изменить его на вектор Set *, я не смог заставить его работать. Где я иду не так?
Что такое 'Set'? Как это объявлено? В показанном коде 'set' есть вектор' Set * ', поэтому печать i-го элемента из' set' будет, очевидно, печатать адрес. Может быть, вам нужен элемент из структуры данных/контейнера 'Set', используйте' -> 'для этого. – P0W
sets - вектор указателей Set. Он содержит ** указатели **. Указатели - это адреса. Когда вы std :: cout их, это логически печатает адреса. Это то, что ваш код спрашивает, это то, что вы логически получаете. Что еще вы хотели бы сделать? –
Мое намерение заключалось в том, что set [i] распечатывается через функцию перегруженного оператора <<. Набор - это структура структуры связанных списков. Я собирался перебирать его и печатать элементы в перегруженном операторе. Я попытался разыменовать набор с помощью (* sets [i]), но это дало мне ошибку связывания. Я могу получить доступ к элементам и распечатать их с помощью наборов [i] -> data, если я напишу свою собственную функцию, но я не могу заставить ее работать, если я поместил этот код внутри перегруженного << оператора, потому что эта функция никогда не вызывается , – Lucas