由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++ template question
相关主题
请问这是什么错误呀a c++ question
一个C++ template的问题文一个简单的c++
C++ template question谁给详细说一下这句
C++ linking 弱问 (one file)问个c++的template的问题
一个关于C++ template和overload的问题template 疑问
C++ templateCannot use my own container as the underlying container of a stack? (c++)
C++ template function type请教一下这个template function在gcc下要怎么修改
c++ template question:c++ template specialization 参数
相关话题的讨论汇总
话题: const话题: rational话题: ostream话题: template话题: class
进入Programming版参与讨论
1 (共1页)
t******m
发帖数: 255
1
#include
templateclass Rational;//forward deceleration
template std::ostream& operator<< (std::ostream& , const
Rational& ); //为什么这里用 不行。而在class里要用
templateclass Rational
{
public:
Rational(const T & top,const T & bottom):Numerator(top),Denominator(
bottom){}
const T& Num()const{return Numerator;}
const T& Dem()const{return Denominator;}
virtual ~Rational(){}
friend std::ostream& operator<< (std::ostream& , const Ratio
z****e
发帖数: 2024
2
template std::ostream& operator<< (std::ostream& , const
Rational& );
把operator<<后边的去掉。
你加上,是一个specialization的形式, 但是无从specialize 起,本身就错误的语法。
另外,你根本不需要friend呀,都是通过公有interface干的事情。
如果class里边没有,是一个普通函数,你没定义过,编译器找不到。
或者你根本用不着模板,就直接把friend定义class里边,也不用,也不用forward delcare,这样,每次,class模板生成一次,都新生成一个overload friend,的普通函数。
明白否?
t******m
发帖数: 255
3
Thanks

语法。
delcare,这样,每次,class模板生成一次,都新生成一个overload friend,的普通
函数。

【在 z****e 的大作中提到】
: template std::ostream& operator<< (std::ostream& , const
: Rational& );
: 把operator<<后边的去掉。
: 你加上,是一个specialization的形式, 但是无从specialize 起,本身就错误的语法。
: 另外,你根本不需要friend呀,都是通过公有interface干的事情。
: 如果class里边没有,是一个普通函数,你没定义过,编译器找不到。
: 或者你根本用不着模板,就直接把friend定义class里边,也不用,也不用forward delcare,这样,每次,class模板生成一次,都新生成一个overload friend,的普通函数。
: 明白否?

t******m
发帖数: 255
4
按道理说,如果我把forward中的和class 中的都去掉,应该可以编译过了吧

语法。
delcare,这样,每次,class模板生成一次,都新生成一个overload friend,的普通
函数。

【在 z****e 的大作中提到】
: template std::ostream& operator<< (std::ostream& , const
: Rational& );
: 把operator<<后边的去掉。
: 你加上,是一个specialization的形式, 但是无从specialize 起,本身就错误的语法。
: 另外,你根本不需要friend呀,都是通过公有interface干的事情。
: 如果class里边没有,是一个普通函数,你没定义过,编译器找不到。
: 或者你根本用不着模板,就直接把friend定义class里边,也不用,也不用forward delcare,这样,每次,class模板生成一次,都新生成一个overload friend,的普通函数。
: 明白否?

g**********1
发帖数: 1113
5
may need the declaration of operator* in the body of class.
t******m
发帖数: 255
6
operator* is the global function.

【在 g**********1 的大作中提到】
: may need the declaration of operator* in the body of class.
z****e
发帖数: 2024
7
汝仍旧不知我心。
forward的T是语法错误,没有这么写的。
class的T是表示该函数是模板,去掉T,只剩<>亦可。

【在 t******m 的大作中提到】
: 按道理说,如果我把forward中的和class 中的都去掉,应该可以编译过了吧
:
: 语法。
: delcare,这样,每次,class模板生成一次,都新生成一个overload friend,的普通
: 函数。

z****e
发帖数: 2024
8
如果你是编译器,看到forward 已经就是一个模板了,紧接着后面又看到一个,作
何感想?
template std::ostream& operator<<, 明明白白说了是个模板,后面再
加一个是画蛇添足吗?但是善良的编译器,会最大耐心的去理解你,会认为你是最
有聪明才智的人,不会犯这种错误,肯定是你有特殊的目的,才会告诉编译器,这不仅
仅是个模板,而且要用类型T,这个特殊的目的就是specialization。
但是,编译器猛然发现,你根本没有定义普通形式的模板,而且这个类型也不存在
,啊!原来你刷我,我就和死磕。
t******m
发帖数: 255
9
OK了,知晓也

【在 z****e 的大作中提到】
: 如果你是编译器,看到forward 已经就是一个模板了,紧接着后面又看到一个,作
: 何感想?
: template std::ostream& operator<<, 明明白白说了是个模板,后面再
: 加一个是画蛇添足吗?但是善良的编译器,会最大耐心的去理解你,会认为你是最
: 有聪明才智的人,不会犯这种错误,肯定是你有特殊的目的,才会告诉编译器,这不仅
: 仅是个模板,而且要用类型T,这个特殊的目的就是specialization。
: 但是,编译器猛然发现,你根本没有定义普通形式的模板,而且这个类型也不存在
: ,啊!原来你刷我,我就和死磕。

1 (共1页)
进入Programming版参与讨论
相关主题
c++ template specialization 参数一个关于C++ template和overload的问题
为什么在overloading中,friend <<不能读取private值呢?C++ template
Why should i include .cpp instead of .hC++ template function type
return Triangular_iterator( _beg_pos );意思c++ template question:
请问这是什么错误呀a c++ question
一个C++ template的问题文一个简单的c++
C++ template question谁给详细说一下这句
C++ linking 弱问 (one file)问个c++的template的问题
相关话题的讨论汇总
话题: const话题: rational话题: ostream话题: template话题: class