Потоки ввода вывода в шаблоне классов - проблемма :(
От: Аноним  
Дата: 24.12.07 18:05
Оценка:
Сразу извиняюсь за мой французкий — но в терминах я могу путаться.

Суть проблеммы: не могу переопределить потоки ввода вывода для шабланна класов:



#include <iostream.h>
template <class T> 
class ddm 
{
/*
*/
template <class T> friend ostream& operator<<(ostream& r,const ddm <T>& aout);
};
template <class T> ostream& operator<< (ostream& r, const ddm <T>& aout)
{
}



выдает ошибки:

[C++ Error] cl_massiv.cpp(73): E2335 Overloaded 'operator ostream & << <char>(ostream &,const ddm<char> &)' ambiguous in this context
[C++ Error] cl_massiv.cpp(73): E2335 Overloaded 'operator ostream & << <char>(ostream &,const ddm<char> &)' ambiguous in this context

Вобщем я перерыл море инфы в сети, встречал около 5 видов записи данного переопределения — но не один у меня не заработал

Я делал и так
friend ostream& operator<<(ostream& r,const ddm <T>& aout);

получая
[Компоновщик Error] Unresolved external 'operator <<(_STL::basic_ostream<char, _STL::char_traits<char> >&, const ddm<char>&)' referenced from C:\DOCUMENTS AND SETTINGS\ÊÎÍÑÒÀÍÒÈÍ\ÐÀÁÎ×ÈÉ ÑÒÎË\ÍÎÂÀß ÏÀÏÊÀ (6)\CL_MASSIV.OBJ

и вообще много как, но решения проблыммы как вы понимаете так и не нашол...

пс среда разработки С++Builder
Re: Потоки ввода вывода в шаблоне классов - проблемма :(
От: Аноним  
Дата: 24.12.07 22:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Сразу извиняюсь за мой французкий — но в терминах я могу путаться.


А>Суть проблеммы: не могу переопределить потоки ввода вывода для шабланна класов:




А>
А>#include <iostream.h>
А>template <class T> 
А>class ddm 
А>{
А>/*
А>*/
А>template <class T> friend ostream& operator<<(ostream& r,const ddm <T>& aout);
А>};
А>template <class T> ostream& operator<< (ostream& r, const ddm <T>& aout)
А>{
А>} 
А>



А>выдает ошибки:


А>[C++ Error] cl_massiv.cpp(73): E2335 Overloaded 'operator ostream & << <char>(ostream &,const ddm<char> &)' ambiguous in this context

А>[C++ Error] cl_massiv.cpp(73): E2335 Overloaded 'operator ostream & << <char>(ostream &,const ddm<char> &)' ambiguous in this context

А>Вобщем я перерыл море инфы в сети, встречал около 5 видов записи данного переопределения — но не один у меня не заработал


А>Я делал и так

А>
А>friend ostream& operator<<(ostream& r,const ddm <T>& aout);
А>

А>получая
А>[Компоновщик Error] Unresolved external 'operator <<(_STL::basic_ostream<char, _STL::char_traits<char> >&, const ddm<char>&)' referenced from C:\DOCUMENTS AND SETTINGS\ÊÎÍÑÒÀÍÒÈÍ\ÐÀÁÎ×ÈÉ ÑÒÎË\ÍÎÂÀß ÏÀÏÊÀ (6)\CL_MASSIV.OBJ

А>и вообще много как, но решения проблыммы как вы понимаете так и не нашол...


А>пс среда разработки С++Builder

template<class T>
class ddm{
//blah blah blah

template<class A> friend operator<<(ostream&,const ddm<A>&);
};

template<class T>
ostream& operator<<(ostream&,const ddm<T>&)

Интересно Вы тоже не будете понимать почему компилер ругается на такое
int a;
double a;
?
Re: Потоки ввода вывода в шаблоне классов - проблемма :(
От: Went  
Дата: 24.12.07 22:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Суть проблеммы: не могу переопределить потоки ввода вывода для шабланна класов:


Не знаю, мож я где-то что-то у тебя не подметил, но у меня очень схожий код работает на ура (MSVS).
Мне кажется, что проблема где-то в самом использовании данного шаблона. Что-то из фактических аргументов оператора двояко приводится к формальному.
Или глюк билдера, он с шаблонами не дружен
Re[2]: Потоки ввода вывода в шаблоне классов - проблемма :(
От: Went  
Дата: 24.12.07 22:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Интересно Вы тоже не будете понимать почему компилер ругается на такое

А>
А>int a;
А>double a;
А>
?


Не понял. Торможу, где аналогия?
Re[2]: Потоки ввода вывода в шаблоне классов - проблемма :(
От: Аноним  
Дата: 25.12.07 02:58
Оценка:
А>
А>template<class T>
А>class ddm{
А>//blah blah blah

А>template<class A> friend operator<<(ostream&,const ddm<A>&);
А>};

А>template<class T>
А>ostream& operator<<(ostream&,const ddm<T>&)
А>

А>Интересно Вы тоже не будете понимать почему компилер ругается на такое
А>
А>int a;
А>double a;
А>
?


да, один из вариантов что я пробовал был именно таким (причем именно с такими же обьяснениями как у Вас — мол компилятор пытается заного опеределить T в теле самого шаблона),
Но дело в том что если я так пишу то вылетает одна та же самая ошибка:

[C++ Error] cl_massiv.cpp(73): E2335 Overloaded 'operator ostream & << <char>(ostream &,const ddm<char> &)' ambiguous in this context
[C++ Error] cl_massiv.cpp(73): E2335 Overloaded 'operator ostream & << <char>(ostream &,const ddm<char> &)' ambiguous in this context

Может быть Went прав и все дело в Builder-е (ну или именно в моей версии билдера (она вроде как 2002 года))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.