Форум программистов, компьютерный форум CyberForum.ru

Перегрузка оператора << - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как использовать класс описанный в другом файле http://www.cyberforum.ru/cpp-beginners/thread808803.html
Есть проект, несколько файлов, в одном из них описаны классы. Как использовать эти классы в других файлах?
C++ String to DWORD Есть адрес переменной в виде (0x7515A0FA), хранящийся в переменной string. Как переделать в DWORD? http://www.cyberforum.ru/cpp-beginners/thread808802.html
C++ Интерфейсы, сокрытие реализации и "уход" за памятью
Всем привет! Вот вобщем-то такая штука: есть интерфейс и функция создающая экземпляр интерфейса в DLL. Функция создает экземпляр в куче (операцией new:) используя класс, наследуемый от интерфейса. Как правильно удалять этот экземпляр или еще лучше чтобы он удалялся автоматически. Вот интерфейс и функция в хидере DLL: #pragma once class API IMyInterface { public: virtual void...
Дана строка символов, состоящая из букв и цифр. Удалить из строки все цифры C++
Нужна прога... Дана строка символов, состоящая из букв и цифр. Удалить из строки все цифры. Буду очень признательна
C++ Число Фибоначчи через рекурсию http://www.cyberforum.ru/cpp-beginners/thread808772.html
Для заданного числа n посчитать числа ФИбоначчи (то есть число будет равно суме двух предыдущих), которое задано след. соотношениями: F(0)=F(1)=1, F(N)=F(N-1)+F(N-2), n>1 .
C++ Работа с fstream Допустим у нас есть такие данные в файле: 100 - long: ilafj iwnvwj bve bvjere*/g*-er/hg h rh gnedrfgve и имеем простой класс class A { private: int a; char b; char c; }; подробнее

Показать сообщение отдельно
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
14.03.2013, 22:51     Перегрузка оператора <<
в общем это связано с плюсовым поиском кандидата из набора перегруженных функций.
поскольку тайпдеф - это всего лишь синоним, то Word - это что-то из пространства имен std.
поскольку все, что вы пытаетесь сделать тут:
copy(task.begin(), task.end(), ostream_iterator<Word>(cout, "\n"));
находится в пространстве имен std, то и поиск нужного оператора происходит только в этом пространстве.
А в этом пространстве полно перегрузом operatora <<, из них составляется список и на этом поиск нужной
функции прекращается. Далее идет поиск по этому списку подходящей по аргументам. А таких не находится.
Компилятор вываливает ошибку.
Как обходной маневр - занести такой оператор в пространство std, но так делать не рекомендуется. В
пространство std ничего своего не стоит вносит. Это может привести к другим хитрым багам.
C++
1
2
3
4
5
6
7
8
9
10
namespace std
{
    ostream& operator << (ostream& out, const Word& word)
    {
        out << word.first << " - ";
        copy(word.second.begin(), word.second.end() - 1, ostream_iterator<int>(out, ", " ) );
        out << *(word.second.end() - 1);
        return out;
    };
}
 
Текущее время: 16:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru