Сразу извиняюсь за мой французкий — но в терминах я могу путаться.
Суть проблеммы: не могу переопределить потоки ввода вывода для шабланна класов:
#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
Здравствуйте, Аноним, Вы писали:
А>Сразу извиняюсь за мой французкий — но в терминах я могу путаться.
А>Суть проблеммы: не могу переопределить потоки ввода вывода для шабланна класов:
А>А>#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;
?
Здравствуйте, Аноним, Вы писали:
А>Суть проблеммы: не могу переопределить потоки ввода вывода для шабланна класов:
Не знаю, мож я где-то что-то у тебя не подметил, но у меня очень схожий код работает на ура (MSVS).
Мне кажется, что проблема где-то в самом использовании данного шаблона. Что-то из фактических аргументов оператора двояко приводится к формальному.
Или глюк билдера, он с шаблонами не дружен
Здравствуйте, Аноним, Вы писали:
А>Интересно Вы тоже не будете понимать почему компилер ругается на такое
А>А>int a;
А>double a;
А>
?
Не понял. Торможу, где аналогия?
А>А>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 года))