c++ 函数模板 相关问题 10

函数模板定义之后必须接着跟函数吗如把自定义函数放在主函数前就可以但把自定义函数放在主函数后就不行求姐... 函数模板定义之后必须接着跟函数吗如 把自定义函数放在主函数前就可以 但把自定义函数放在主函数后就不行求姐 展开
 我来答
lusir
2019-03-02 · 知道合伙人IT服务行家
lusir
知道合伙人IT服务行家
采纳数:89 获赞数:166
网络工程师,DCS开发核心工程师,公司研发先进

向TA提问 私信TA
展开全部

像第二个图片里,你需要在main函数前先声明sort1函数,把第15行最后加个分号复制到第5行上面即可,如下图:

c语言中声明和定义的区别

声明(declaration )指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等。声明,用于编译器(compiler)识别变量名所引用的实体。以下这些就是声明:

extern int bar;

extern int g(int, int);

double f(int, double); // 对于函数声明,extern关键字是可以省略的。

class foo; // 类的声明,前面是不能加class的。

定义是对声明的实现或者实例化。连接器(linker)需要它(定义)来引用内存实体。与上面的声明相应的定义如下:

int bar;

int g(int lhs, int rhs) {return lhs*rhs;} 

double f(int i, double d) {return i+d;} 

class foo {};// foo 这里已经拥有自己的内存了,对照上面两个函数,你就应该明白{}的用处了吧?

无论如何,定义 操作是只能做一次的。如果你忘了定义一些你已经声明过的变量,或者在某些地方被引用到的变量,那么,连接器linker是不知道这些引用该连接到那块内存上的。然后就会报missing symbols 这样的错误。如果你定义变量超过一次,连接器是不知道把引用和哪块内存连接,然后就会报 duplicated symbols这样的错误了。以上的symbols其实就是指定义后的变量名,也就是其标识的内存块。

如果只是为了给编译器提供引用标识,让编译器能够知道有这个引用,能用这个引用来引用某个实体(但没有为实体分配具体内存块的过程)是为声明。如果该操作能够为引用指定一块特定的内存,使得该引用能够在link阶段唯一正确地对应一块内存,这样的操作是为定义。

声明是为了让编译器正确处理对声明变量和函数的引用。定义是一个给变量分配内存的过程,或者是说明一个函数具体干什么用。

更多追问追答
追问

还是不行= =

追答
报什么错误
无私又洒脱灬百花718
2019-03-02 · TA获得超过7009个赞
知道大有可为答主
回答量:8743
采纳率:39%
帮助的人:413万
展开全部
2.1 函数模板的定义 不管它们的性质如何,所有的函数模板都具有同样的基本格式: template 函数头 函数体 例如,下面是一个2参数的模板的声明: template T max(T param1 ,T param2) { //此处为函数体 } 2.根据上面已定义的模板,编译器将可生成下面的模板函数(都是对的,函数模板的目的就是函数重载): char * max(char * a, char * b) //模板函数1 { return (a>b)?a:b; } int max(int a, int b) //模板函数2 { return (a>b)?a:b; } double max(double a, double b) //模板函数2 { return (a>b)?a:b; } 等等。。。。。。。。。。。。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式