j*****k 发帖数: 1198 | 1 template
ostream& operator<<(ostream& os, const A& rhs)
{
return rhs.out(os);
};
error: passing ‘const A’ as ‘this’ argument of ‘std::ostream& A<
T>::out(std::ostream&) [with T = float]’ discards qualifiers
这儿T是float. A里面有funcion out(ostream& os)用来显示内容
A a(2);
cout< |
p***o 发帖数: 1252 | 2 Is A::out const?
A<
【在 j*****k 的大作中提到】 : template : ostream& operator<<(ostream& os, const A& rhs) : { : return rhs.out(os); : }; : error: passing ‘const A’ as ‘this’ argument of ‘std::ostream& A< : T>::out(std::ostream&) [with T = float]’ discards qualifiers : 这儿T是float. A里面有funcion out(ostream& os)用来显示内容 : A a(2); : cout<
|
j*****k 发帖数: 1198 | 3 ostream& out(ostream&);
没设const, 一定要设么
【在 p***o 的大作中提到】 : Is A::out const? : : A<
|
p***o 发帖数: 1252 | 4 Well, if it could be const, set it to const; if not,
change operator << to take a non-const A.
【在 j*****k 的大作中提到】 : ostream& out(ostream&); : 没设const, 一定要设么
|
p****o 发帖数: 1340 | 5 it's a common mistake... the stl error msg is bad too.
【在 j*****k 的大作中提到】 : ostream& out(ostream&); : 没设const, 一定要设么
|
j*****k 发帖数: 1198 | 6 yeah, got it, thanks
【在 p***o 的大作中提到】 : Well, if it could be const, set it to const; if not, : change operator << to take a non-const A.
|
j*****k 发帖数: 1198 | 7 是呀,楞没搞明白这错误指的是什么
【在 p****o 的大作中提到】 : it's a common mistake... the stl error msg is bad too.
|
j*****k 发帖数: 1198 | 8 对了,operator**不能overload呀?
【在 j*****k 的大作中提到】 : yeah, got it, thanks
|
p***o 发帖数: 1252 | 9 yeah, but once you have more experience, you can figure it out
without reading the error message ...
【在 j*****k 的大作中提到】 : 是呀,楞没搞明白这错误指的是什么
|
p***o 发帖数: 1252 | 10 ** ? I don't think there is such an operator.
What's your purpose? De-pointer twice or power?
The first one can be achieved using a proxy class.
【在 j*****k 的大作中提到】 : 对了,operator**不能overload呀?
|
|
|
j*****k 发帖数: 1198 | 11 power呀,但是c++不让我作. 如果没有这个operator
怎么设**成power函数?
【在 p***o 的大作中提到】 : ** ? I don't think there is such an operator. : What's your purpose? De-pointer twice or power? : The first one can be achieved using a proxy class.
|
p***o 发帖数: 1252 | 12 hehe, you can only overload an existing one but you
cannot create a new one. Using pow is still elegant.
【在 j*****k 的大作中提到】 : power呀,但是c++不让我作. 如果没有这个operator : 怎么设**成power函数?
|
j*****k 发帖数: 1198 | 13 不是用**习惯些么,再说了用pow得include cmath不是
【在 p***o 的大作中提到】 : hehe, you can only overload an existing one but you : cannot create a new one. Using pow is still elegant.
|
p***o 发帖数: 1252 | 14
这些都跟c走,**是fortran的?^是basic的?
【在 j*****k 的大作中提到】 : 不是用**习惯些么,再说了用pow得include cmath不是
|
j*****k 发帖数: 1198 | 15 **是xp powertoy里面那个calculator的
当然其它语言也有,就不知道是哪个了
【在 p***o 的大作中提到】 : : 这些都跟c走,**是fortran的?^是basic的?
|
j*****k 发帖数: 1198 | 16 对了,那个template constant expression parameter用的多不多?
怎么看怎么觉得捌扭
eg: template
【在 p***o 的大作中提到】 : : 这些都跟c走,**是fortran的?^是basic的?
|
p***o 发帖数: 1252 | 17 int 常用,float/double 最好别用,char * 什么的太麻烦。
【在 j*****k 的大作中提到】 : 对了,那个template constant expression parameter用的多不多? : 怎么看怎么觉得捌扭 : eg: template
|
j*****k 发帖数: 1198 | 18 总觉得还是写在body里面觉得顺眼些
【在 p***o 的大作中提到】 : int 常用,float/double 最好别用,char * 什么的太麻烦。
|
j*****k 发帖数: 1198 | 19 为什么float/double不好用呢,好象和int也没差多少
这些东西是public, private, 还是protected?
【在 p***o 的大作中提到】 : int 常用,float/double 最好别用,char * 什么的太麻烦。
|
p***o 发帖数: 1252 | 20 习惯了就好了,比如说编译时检查量纲,就要用到这个,具体参见
C++ Template Metaprogramming 3.1 。
【在 j*****k 的大作中提到】 : 总觉得还是写在body里面觉得顺眼些
|
|
|
p***o 发帖数: 1252 | 21
据说是因为浮点数的内部表示问题,标准14.1直接说不行。
只在class内部可见,无所谓public/private/protected了。
【在 j*****k 的大作中提到】 : 为什么float/double不好用呢,好象和int也没差多少 : 这些东西是public, private, 还是protected?
|
p***o 发帖数: 1252 | 22
有点。
没看明白,你说啥?是不是这个:
14.1.2
There is no semantic difference between class and typename in
a template parameter. typename followed by an unqualified-id
names a template type parameter. typename followed by a
qualified name denotes the type in a non-type parameter
declaration. A storage class shall not be specified in a
template parameter declaration.
【在 j*****k 的大作中提到】 : 为什么float/double不好用呢,好象和int也没差多少 : 这些东西是public, private, 还是protected?
|
p***o 发帖数: 1252 | 23 No,都是一样的。我不明白你的istantiate指的啥。
class
【在 j*****k 的大作中提到】 : template : ostream& operator<<(ostream& os, const A& rhs) : { : return rhs.out(os); : }; : error: passing ‘const A’ as ‘this’ argument of ‘std::ostream& A< : T>::out(std::ostream&) [with T = float]’ discards qualifiers : 这儿T是float. A里面有funcion out(ostream& os)用来显示内容 : A a(2); : cout<
|
j*****k 发帖数: 1198 | 24 呵呵,我搞错了
【在 p***o 的大作中提到】 : No,都是一样的。我不明白你的istantiate指的啥。 : : class
|
t****t 发帖数: 6806 | 25 你能不能拿本书看看先啊。float根本不能作为模板参数。
【在 j*****k 的大作中提到】 : 为什么float/double不好用呢,好象和int也没差多少 : 这些东西是public, private, 还是protected?
|
d****2 发帖数: 6250 | 26
of course float can be template typename.
add const to member function "out" definition:
template
...inside class A...{
ostream &out(ostream & ) const {...}}
【在 t****t 的大作中提到】 : 你能不能拿本书看看先啊。float根本不能作为模板参数。
|
t****t 发帖数: 6806 | 27 我的意思是,float不能作为non-type template parameter
比如你可以写
template ....
但是你不能写
template ...
【在 d****2 的大作中提到】 : : of course float can be template typename. : add const to member function "out" definition: : template : ...inside class A...{ : ostream &out(ostream & ) const {...}} :
|