c++问题:什么时候需要用额外的模版变量,friend为什么可以放在定义的前面?

图片1!
![图片2图片说明
图片3!

图片1和2代码完全正确,可以运行。图片3代码错误,编译不通过

我有两个疑问:
1. 为什么图片1中需要一个额外的模版变量U,而图片2不需要这样操作。什么时候需要用额外的模版变量呢?

2.friend函数的一般用法是:在类外定义某个函数,然后在类中用friend对该函数进行声明。为什么图片1中friend函数定义的部分写在类里面了,但是图片2中却不能这样操作?(图片3中就是错误的)

c++
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++中的friend详细解析
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。 友元函数的实现可以在类外定义,但必须在类内部声明 友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类, 但需要在类的定义中加以声明,声明时只需在友
C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?
参考网址:http://www.cnblogs.com/web-HCJ/p/4468689.html 报错信息:error C2065: 'salary' : undeclared identifier 1 2 3 4 5 6 7 8 9 #include   v
friend 函数在类中的用法
友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。 定义格式(c++) friend (); 问题提出 我们已知道类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都
C语言中尽量不要在头文件中定义变量
不推荐在头文件中定义变量。 因为很多.c文件都可以包含.h文件,也就是说这个变量会在很多.c文件中存在一个副本。假如这是一个多文件项目,在连接阶段,连接器就会抱怨存在多个相同变量名的全局变量,导致连接出错。 所以.h文件中一般只能包含全局变量的声明,函数声明,宏定义一类的,在.h文件中定义变量是不被推荐的。
c语言定义变量时需要在最前边定义,否则会出现错误!!
c语言定义变量时需要在最前边定义,否则会出现错误!!如下例题:给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。 #include<stdio.h> void main() { int min,max,i,mid; while(~scanf("%d%d",&min,&max)) { if(min>max) {mid=min;min=max;max...
在C语言中为什么scanf输入语句,要在变量名前加&呢?
首先在C语言中,输入变量的语法是:scanf("格式控制","变量地址") 可以看出,第二个的格式为变量地址。 在C语言中,变量在定义之后,就会在计算机内存中非配一块空间给这个变量,该空间在内存中的地址称为变量的地址。 为了得到变量的地址,需要在变量前加一个&(称为取地址运算符),也就是“&变量名”的写法。 补充:常见数据类型变量的scanf格式符 数据类型 格
在C++中什么时候需要加上std::
原文地址:https://blog.csdn.net/tong_xin2010/article/details/19490555                     https://zhidao.baidu.com/question/302553183.html 文章写的很透彻,想保存下来供以后查看方便 std::是命名空间,你所用到的很多函数或者类都是被放到命名空间里面的,命名空间是防...
Mysql存储过程的declare声明变量必须放在最前面
Mysql存储过程的declare声明变量必须放在最前面
C语言变量的定义一定要放在开头!
C语言变量的定义一定要放在开头! 否则编译器会报错的!  就是要先定义完变量,再做其他事!
一个变量,一个常量,用equals()方法比较,让咱们,看看到底是常量放前面好啊,还是变量放前面好
转载自:http://www.cnblogs.com/baby-zhude/p/4218846.html 其实说白了,如果是两个都是变量,那就放哪都行没啥区别;(有点废话了) 现在主要就是有一个是常量,大家应该知道吧,equals()方法是在Object类里定义的,也就是说任何对象都可以调用equals()方法,但是对象在调用方法的时候,如果对象为null那系统运行就会报空指针异常
c/c++变量前加*和加&的区别
1.* 变量前加*号,只有在变量为指针情况下才是合法的 当*用于定义时,是标明该变量为指针类型 除此以外,*的作用是取值。 C++中的指针可以理解为一个地址的值,*用于取值时就是取出改地址中存储的值 2.& &:一个是取地址符作用,另一个是引用 注意:&是取址符号。但&也可以有另一个用法,就是是其它变量的别名,如int &a=b;此时a就是b,b就是a,改变a的值
C语言,为什么要用int main不用void吗?
1.main函数的定义,很多例子程序将main的类型定义为void,但是照谭浩强的讲法,C99标准建议的是将main指定成int类型,正常运行,return 0; 有些编译系统会自动加上这些东西。同时可以通过操作指令根据return判断是否正常运行。      突然间脑筋短路,在ctrl+r窗口狂试exe,运行超快,根本就看不到,突然间想起了dos,键入cmd,只需要运行完exe后键入e
java基础总结大全
环境变量path和classpath的作用,变量有什么用?为什么要定义变量?什么时候用?
类的定义和声明必须放在main函数前
类的定义和声明必须放在main函数前
.c中变量必须定义在执行语句前面
废话不多说,先看下面代码: int main() {     int a =1; a = 2; int b = 3; } 如果你将这段代码保存在.c文件下,在vc++6.0中去编译,编译器会报错,但同样的代码保存在.cpp文件下再编译,正确。这是为什么呢? 这是C标准的问题: C98中规定,在任何执行语句(上面的a=2;是表示将变量a重新赋值为2,所以是执行语句)之前.
main()主函数内外的变量有何区别??(菜鸟级的问题)
main函数是一个进程的入口,初次之外,和别的函数无区别,你说main函数内的
什么时候应该将形参定义为引用类型。什么时候不应该将形参定义为引用。
如下情况将形参定义为引用 1.通过形参调用修改函数的值,如swap函数 2.通过一次调用获得多个结果值 3.传递大型对象时,避免复制形参 如下情况不应该将形参定义为引用 1.不需要通过函数调用修改实参的值,如求绝对值的函数
C++什么时候用new,什么时候不用new
void func() { Student st; st.name="hello"; } void main() { func(); cout<<st.name;//错误的调用 } st只是局部变量,出了函数st就被销毁了,这样不利于传递参数等,那就得用全局变量了,而new就避免使用全局变量。 void func() { Student *st=new Student; st->name="hel
c++中为什么函数定义可以在主函数后面而类的定义不可以?
根据函数的申明就可以知道其返回类型,所以编译时可以为其分配内存,但是类就不一样,只是声明的话,在编译的时候无法为其分配内存,在定义对象是会报错,但是定义对象指针不会报错,原因就是指针的内存是一定得,所以不会报错,这也是为什么类的定义需要在主函数之前。
结构体变量类型前面的struct能不能省略
//声明结构体 struct example{ //do sth }; //c语音声明example变量不可以省略struct关键字 struct example Struct1; //c++声明example对象可以省略关键字struct,并且c++里struct和类class基本具有相同的功能,只不过struct里的访问权限默认是public,class默认是private
C语言 变量前面有个"&"
<br />在英文中这个符号和“and”是一个意思,就读作“and”<br /> <br />“&”是c语言的取地址运算符。<br />在程序中定义变量时,变量x只要一声明,就会给他分配一块内存来保存这个变量,而“&”就是保存这个变量的内存的地址(相当于给内存编号)<br />C语言的强大之处就是可以直接操作内存<br /> <br />比如:int a //定义变量<br />        a=5   //给a赋值5<br />这个时候,变量a 的值是5,这个值保存在内存上的位置是“&a“<br />为
定义变量前面加小写m
转载出处:https://blog.csdn.net/riskys/article/details/60141781 public class MyClass { public static final int SOME_CONSTANT = 42; public int publicField; private static MyClass sSingleton; int mPackagePri...
判断语句常量放前面
小习惯
模板类里的friend方法
/* 1.模板类里的friend函数的说明和定义 2. 所有一元运算符 建议成员 = ( ) [ ] –> –>* 必须是成员 += –= /= *= ^= 建议成员 &= |= %= >>= <<= 建议成员 所有其他的二元运算符 建议非成员 (非成员应该类内定义,见代码。) */ #include #include using namespace std;
编程规则中为何要求不能在.h文件中定义变量
问题背景:当你接触C语言时,老师一定会强调一个编程规则:永远不要在.h文件中定义变量 疑惑点:是不是说在.h文件中定义会出错? 结论:在.h文件中定义变量不会报错,但是该操作会导致在多个模块中重复定义该同名变量【变量名相同,但地址不同】,与软件逻辑不一致。 分析: 1):知识概要 1&amp;gt; 定义变量和声明变量的区别是定义会产生内存的分配,而申明则不会产生内存的分配,而是告...
【Go】为什么 Go 语言把类型声明放在后面?
关于类型,官网上有一段仔细地介绍了一下函数指针的部分,现在的设计比起 C 的语法,清晰很多。 也就是说,类型放在后面是为了更加清晰易懂。Rob Pike 曾经在 Go 官方博客解释过这个问题(查看原文:Go’s Declaration Syntax),简略翻译如下(水平有限翻译的不对的地方见谅):引言Go语言新人常常会很疑惑为什么这门语言的声明语法(declaration syntax)会和传统的C
最好不要在头文件里定义变量,那是非常业余的行为
定义变量和声明变量的区别在于定义会产生内存分配的操作。 /*module1.h*/ int a = 1; /* 在模块1的.h文件中定义int a */ /*module1.c*/ #include "module1.h" /*在模块1中包含模块1的.h文件*/ /*module2.c*/ #include "module1.h" /*在模块2中包含模块1的.h文件*/
变量定义在哪里好?什么时候该定义为成员变量?
 
什么时候在虚函数(接口)前面加“On”前缀表示事件?
<br /> <br />规则,<br />函数名与代码相同,不用“On”<br />例:<br />void OnClickBtn<br />{<br />     PlayerSound( "Ding.wav" );//播放声音与按下按钮无任何关系<br />}<br /><br />函数名与代码不同,用“On”<br />例:<br />void PushBtn()<br />{<br />     m_eBtnState = eDown; //设置按钮状态为按下,与按下按钮有关<br />    
C语言好难——在头文件中定义const变量
在头文件中定义const不会有多变量的警告或错误,如果该头文件被大量包含会造成rom空间的浪费。 通过查看*.i文件的展开呢,可以发现每个.i文件都会有相应的变量展开。 查看*.map文件,能查看到该变量的多个地址分配。 在预编译的时候如果在头文件定义了const变量,每一个包含该头文件的c文件都会将其展开,而在编译的时候不会报错,因为这符合语法规则,每一个包含这个头文件的*.c文件都会编译
C++:在C++中什么时候需要加上std::
那是命名空间,你所用到的很多函数或者类都是被放到命名空间里面的,命名空间是防止名字重复而使用的,比如STL有个类叫string,而你也设计一个类叫string,那么编译器编译的时候就搞不清楚到底是那个string,所以用一个命名空间就比较方便了。具体是这么回事的,比如有两个班级,A班和B班,两个班各有一个叫张三的人,而两个班的同学相互之间都是非常熟悉的。那么他们聊天的时候说张三,那其他人肯定会问,
c中定义变量的内存分配顺序问题(极易错!!!)
对于c语言中大家都知道所有的变量都必须是先定义后使用的,但是但是,对于好多人而言,基本上没有人来注意自己的编译器和操作系统对这个东西是如何处理的, 1,如果全是一样的类型,比如全是int,编译器会如何分配呢??是从大到小还是从小到大,, 2,如果是基本的混合类型呢, 它又是先给那个分配呢,是不管呢??还是考虑一下呢?? 3, 数组的分配方式和基本类型一样吗??编译器又是如何处理的??如果是混
c++ 模版函数的定义和实现必须放在一个文件中
今天使用模版函数,遇到一个问题。 当我定义一个类,并且将它的一个成员函数定义为模版类型时,需要将该模版函数的实现与该类放在一个文件中。 比如在a.h中定义了class a: [html] view plaincopy class a   {       ...       templatetypename T> a(const 
C语言只能在开头定义变量?
在vc中: C语言: 代码:                        这样就报错! 因为在C语言中变量声明只能在某个代码块(每个大括号就是一个代码块)的开头才行; 比如改成这样就行:
angularjs里 什么时候加{{}} 什么时候不用?
如图,带ng的angular的指令就不需要中括号,原生的属性如value就需要了
为什么需要用friend关键字?
代码如下:rn[code=c]rn//---------------------------------------------------------------------------rnrn#include //不得不要rn#include rnusing namespace std;rn//---------------------------------------------------------------------------rnclass Complexrnrnpublic:rn Complex(double r=0.0, double i=0.0) real = r; imag = i; rn void display() const cout<real + x.real;rn temp.imag = this->imag + x.imag;rn return temp;rnrn//---------------------------------------------------------------------------rnvoid Complex::complex_add(const Complex& x, const Complex& y) //非友元函数rnrn this->real = x.real + y.real;rn this->imag = x.imag + y.imag;rnrn//---------------------------------------------------------------------------rnComplex complex_add2(const Complex& x, const Complex& y) //一定要是友元函数?为什么?rnrn Complex temp;rn temp.real = x.real + y.real; //非友元情况下temp不能访问real,为什么?rn temp.imag = x.imag + y.imag;rn return temp;rnrn//---------------------------------------------------------------------------rnrn//测试代码:rnint main(int argc, char* argv[])rnrn Complex a(1.0, 2.0), b(3.0, 5.0), c;rn //c = a.add(b); // OKrnrn //c.complex_add(a,b); // OKrnrn c = complex_add2(a,b); // ?whyrnrn c.display();rnrn return 0;rnrn//---------------------------------------------------------------------------rn[/code]rnrn如果complex_add2前不加friend,不也可以理解为Complex类的成员函数吗?为什么不能通过编译?求释疑rnrn编译器为CB6.0。
常量写在==左边
写左边还是右边都可以,只是书写习惯的问题,但是写在左边有以下的好处: 例如: if(flag==5) 当少写一个=,变成flag=5,会变成死循环,编译器不会报错。   if(5==flag) 此时若少写一个=,变成5=flag,编译器会报错。...
c语言中函数变量定义是不是必须在函数的开始处?
c语言不能随时定义变量 使用.c时,必须在函数的开始处定义变量,必须定义在未进行赋值计算等之前。 c++才可以。
C++中friend的使用
C++中friend的使用
调用函数时为什么要在函数名前加“(void)”
我们知道,在定义函数时,加在函数名前的“void”表示该函数没有返回值。但在调用时,在函数名前加“(void)”的作用又是什么呢?   最明显的一点就是表示程序并不关心调用该函数后的返回值是什么,比如函数strcpy,我们直接用“strcpy(des_str, src_str);”这样的形式来调用。“(void)strcpy(des_str, src_str);”这样的形式还真不多见!
文章热词 颜色模型 Objective-C培训 像质量评价标准 设计制作学习 机器学习教程
相关热词 server的安全控制模型是什么 sql ios获取idfa android title搜索 学习python需要用的书籍 学习python需要用的书籍6

相似问题

0
c++问题:什么时候需要用额外的模版变量,friend为什么可以放在定义的前面?
0
怎么解决这个jasvascrpt表达式计算的问题
2
C语言编译时,提示invalid conversion from ‘char’ to ‘char*’ [-fpermissive]错误,请问哪里问题?
1
javascrpt语言里读取一个字符串,然后再分割成单个的字符,放在不同的表单
0
opencv中 vcap >> frame的分辨率问题,vcap抓的是672*380,而保存图片时,却是672*570,为什么
0
MFC 使用active插件 webbroswer 执行问题
3
【vs2017】为什么无法生成exe?Debug目录里啥都没有咋整?
2
C++段错误的问题,题目为PAT甲级1095
3
为什么第一个程序运行出来的范围不对?第二个程序如果需要手动输入改变范围(n,m)应该怎么改写?
1
C++中结构体嵌套,如何new分配内存?
2
求问Fortran一个基本语法问题
1
为什么用了micSendString后仍然出不了音乐?
1
【c++】为什么运行程序显示指令引用了0x内存,该内存不能为written
2
C++中acos(a)中的a要是什么数据类型?
0
HDU 2068 一道错排+组合的简单题。。但是不懂一个可以互换的小细节为什么一个能AC一个就是会WA。。。
0
textmode, textcolor, window, wherex, bioskey等在TC中的函数,在VS中用什么函数可以替换。
2
编写程序(用C或C++),求大神指点,多谢!
0
为什么在VS2017上能正常运行而在OJ上面就Runtime Error:Segmentation fault呢?求助!!!
2
在C++如何计算任意两个时刻间的时间差?
0
webserver单步调试显示已经接收到数据,还是显示404,为什么呢