От:
KoY
Дата: 21.08.04 21:30
Оценка:
Почему не работает? — подскажите что исправить..
template <typename T> class comment
{
public :
comment(T _T):m_T(_T)
{
}
~comment()
{
}
friend std::ostream& operator <<(std::ostream& os, comment& cmnt);
private :
typename T& m_T;
};
template <typename T>
std::ostream& operator <<(std::ostream& os, comment<T>& cmnt)
{
return os << "// " << cmnt.m_T;
}
и соответсвенно попытка:
std::cout<<comment<int >(999);
апочему-то печатает не те цифры...
Здравствуйте, KoY, Вы писали:
KoY>Почему не работает? — подскажите что исправить..
KoY>KoY> comment(T _T):m_T(_T)
KoY> {
KoY> }
KoY> typename T& m_T;
KoY>};
KoY>апочему-то печатает не те цифры...
KoY>
Инициализируем ссылку временной ЛОКАЛЬНОЙ (_T)переменной. Может, ты имел ввиду "T m_T" или "comment(T &_T):m_T(_T)" ?
Правильно работающая программа — просто частный случай Undefined Behavior
От:
KoY
Дата: 21.08.04 23:31
Оценка:
Здравствуйте, _Winnie, Вы писали:
_W>Здравствуйте, KoY, Вы писали:
KoY>>Почему не работает? — подскажите что исправить..
KoY>>KoY>> comment(T _T):m_T(_T)
KoY>> {
KoY>> }
KoY>> typename T& m_T;
KoY>>};
KoY>>апочему-то печатает не те цифры...
KoY>>
_W>Инициализируем ссылку временной ЛОКАЛЬНОЙ (_T)переменной. Может, ты имел ввиду "T m_T" или "comment(T &_T):m_T(_T)" ?
если написать такое —
int a = 999;
std::cout<<comment<int>(a);
тот же результат...
и конечно можно написать вместо
typename T& m_T;
T& m_T;
т.е. ссылка здесь должна быть ... можно и указатель ... результат будет ТОТ ЖЕ САМЫЙ — НЕПРАВИЛЬНЫЙ
т.е. я хочу получить ссылку(или указатель) на объект который УЖЕ существует
(мне не нужна КОПИЯ ОБЪЕКТА!!!) и по ссылке вывести в поток ...
Здравствуйте, KoY, Вы писали:
KoY>Здравствуйте, _Winnie, Вы писали:
_W>>Здравствуйте, KoY, Вы писали:
KoY>если написать такое -
KoY>int a = 999;
KoY>std::cout<<comment<int>(a);
Да, так и надо. Так ссылку на 999 создать нельзя, а на i можно.
KoY>т.е. я хочу получить ссылку(или указатель) на объект который УЖЕ существует
Тогда comment(T &_T):m_T(_T)
Только ссылку на 999 у тебя все равно не получится сделать. Так как это константа. Только на i.
Повторюсь,
KoY>>>[ccode]
KoY>>> comment(T _T):m_T(_T)
KoY>>> {
KoY>>> }
KoY>>> typename T& m_T;
KoY>>>};
_W>>Инициализируем ссылку временной ЛОКАЛЬНОЙ (_T)переменной
Надо: comment(T /**/&/**/ _T):m_T(_T)
Правильно работающая программа — просто частный случай Undefined Behavior
KoY:
> Почему не работает? — подскажите что исправить..
Или так:
template <typename T>
class comment
{
public :
comment(const T& _T):m_T(_T)
{
}
~comment()
{
}
template <typename U>
friend std::ostream& operator <<(std::ostream& os, const comment<U> & cmnt);
private :
/*typename*/ const T& m_T;
};
template <typename T>
std::ostream& operator <<(std::ostream& os, const comment<T>& cmnt)
{
return os << "// " << cmnt.m_T;
}
или так:
template <typename T>
class comment;
template <typename T>
std::ostream& operator <<(std::ostream& os, const comment<T>& cmnt);
template <typename T>
class comment
{
public :
comment(const T& _T):m_T(_T)
{
}
~comment()
{
}
friend std::ostream& operator << <T>(std::ostream& os, const comment<T>& cmnt);
private :
/*typename*/ const T& m_T;
};
template <typename T>
std::ostream& operator <<(std::ostream& os, const comment<T>& cmnt)
{
return os << "// " << cmnt.m_T;
}Posted via RSDN NNTP Server 1.9 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, KoY, Вы писали:
И еще, не следует называть свои переменные со знака подчеркивания, да еще такими короткими именами — они считаются зарезервированными для тех, кто не пользуется этим правилом(Microsoft), и разработчиков компиляторов. Что касается конкретно _T — то в заголовочном файле windows <tchar.h> определен макрос "_T", а практически в любой большой полезной программе этот заголовок будет подключен.
Правильно работающая программа — просто частный случай Undefined Behavior
От:
KoY
Дата: 22.08.04 07:20
Оценка:
Здравствуйте, _Winnie, Вы писали:
_W>Надо: comment(T /**/&/**/ _T):m_T(_T)
А вот за это благодарю
Да протупил я гол... запутался — просто не заметил...
От:
KoY
Дата: 22.08.04 07:22
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>KoY:
>> Почему не работает? — подскажите что исправить..
Да — действительно — забыл в конструкторе символ ссылки — это думаю была основная проблема..
Спасибо.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить