2013-11-23 3 views
1

У меня есть вектор указателей, и я пытаюсь перегрузить операционный оператор, чтобы упростить печать. Однако я не могу заставить функцию вызываться. Вот мой код: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 *, я не смог заставить его работать. Где я иду не так?

+0

Что такое 'Set'? Как это объявлено? В показанном коде 'set' есть вектор' Set * ', поэтому печать i-го элемента из' set' будет, очевидно, печатать адрес. Может быть, вам нужен элемент из структуры данных/контейнера 'Set', используйте' -> 'для этого. – P0W

+0

sets - вектор указателей Set. Он содержит ** указатели **. Указатели - это адреса. Когда вы std :: cout их, это логически печатает адреса. Это то, что ваш код спрашивает, это то, что вы логически получаете. Что еще вы хотели бы сделать? –

+0

Мое намерение заключалось в том, что set [i] распечатывается через функцию перегруженного оператора <<. Набор - это структура структуры связанных списков. Я собирался перебирать его и печатать элементы в перегруженном операторе. Я попытался разыменовать набор с помощью (* sets [i]), но это дало мне ошибку связывания. Я могу получить доступ к элементам и распечатать их с помощью наборов [i] -> data, если я напишу свою собственную функцию, но я не могу заставить ее работать, если я поместил этот код внутри перегруженного << оператора, потому что эта функция никогда не вызывается , – Lucas

ответ

1

Разрешение перегрузки выполняется с использованием объявлений, видимых компилятору в точке вызова. Вам нужно будет переместить operator<< перегрузку или, по крайней мере, ее объявление, над кодом, использующим его.

И вот, он работает: http://ideone.com/1BeACP

+0

Это сработало. По какой-то причине у меня была функция-заглушка над всем кодом, но она не работала. Когда я переместил фактическую функцию над кодом, она сработала. Затем, когда я переместил функцию назад и заменил заглушку функции, она все еще работала. Не знаю, где я там ошибся, но спасибо за помощь. – Lucas

Смежные вопросы