перегруженный оператор друга без пространства имен std

Просто интересно, может ли кто-нибудь указать мне в правильном направлении. У меня есть оператор извлечения друзей, который работает, если я включаю пространство имен std; но терпит неудачу, если я этого не делаю. может ли кто-нибудь дать мне подсказку?

ostream& operator << (ostream &out, coins &value)

это также функция друга, поэтому она есть в моем файле class.h (как друг), в моем файле functions.h (как прототип) и в моем файле functions.cpp (логика).

Я пытался сделать это

std::ostream& оператор.... std::ostream& оператор std::‹‹ (и т.д.)

но я просто не вижу, где я ошибаюсь. Мой компилятор продолжает говорить мне, что «ostream не называет тип»

Спасибо


person Community    schedule 27.02.2013    source источник
comment
Вы включили <iostream>?   -  person jrok    schedule 27.02.2013
comment
Это не оператор извлечения: это оператор вставки.   -  person Andy Prowl    schedule 27.02.2013


Ответы (1)


Это ostream, которое существует в пространстве имен std, не делайте std::<< (это даже не имеет смысла!). Старайтесь не использовать подход дробовика к программированию; то есть не пробуйте просто случайные вещи, пока они не сработают. Ошибка говорит вам, что ostream (неквалифицированный) является проблемой, поэтому вы должны сначала решить эту проблему.

#include <iostream>

struct coins
{
    friend std::ostream& operator<<(std::ostream& sink, const coins& value);
};

std::ostream& operator<<(std::ostream& sink, const coins& value)
{
    sink << "doing coins output";
    return sink;
}

int main()
{
    coins c;
    std::cout << c << std::endl;
}

Между прочим, это оператор вставки, когда вы вставляете данные в поток. Извлечение будет >>.

person GManNickG    schedule 27.02.2013
comment
Это интересный вопрос. Согласно здесь(cplusplus.com/reference/ostream/ostream/operator-free), перегрузка не-ostream-member определена в пространстве имен std; без использования пространства имен std, как компилятор узнает, что под ‹‹ вы подразумеваете std::operator‹‹(std::ostream&, const what_type_reference)? - person h9uest; 28.03.2015
comment
@h9uest: поиск в зависимости от аргумента. - person GManNickG; 28.03.2015