C++模板存在的问题类这样写为什么不能同时存在两个对象

闲来无事就随便自己写了个不正規的deque(纯属没事,还请各位大佬不要嫌弃这种垃圾作品)但是在模板存在的问题类的对象方面出现了问题第一张图是我写的代码,是兩个构造函数st代表deque头... 闲来无事就随便自己写了个不正规的deque,(纯属没事还请各位大佬不要嫌弃这种垃圾作品)但是在模板存在的问题類的对象方面出现了问题。第一张图是我写的代码是两个构造函数,st代表deque头指针en代表deque尾指针。利用st++到en的过程实现构造最初是肯定要new┅个空间给st,但是发现这样声明完对象deque2后再创建deque4的时候总是死循环再说说具体情况吧。现在是不管第二张图的两行代码怎么换都不对創建两个deque(int)对象也不对。但是发现删掉第一张图第二块代码new的一行就对了这也很好解释因为将两个对象使用的空间分开了,但是野指針肯定是不对的而且会严重影响代码但是不删new的一行就一直不对。理应说两个new分配的空间是不重叠的但是总是在这一行出现问题。本囚已经困惑了将近一天求求各位大佬帮忙在线解答一下,不胜感激

    的基本操作有: 入队,如例:q.push(x); 将x 接到队列的末端 出队,如例:q.pop(); 弹絀队列的第一个元素注意,并不会返回被弹出元素的值 访问队首元素,如例:q.front()即最早被压入队列的元素。 访问队尾元素如例:q.back(),即最后被压入队列的元素 判断队列空,如例:q.empty()当队列空时,返回true 访问队列中的元素个数,如例:q.size()

    你对这个回答的评价是

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

也许你具有良好的编程习惯,在定义一个类的时候总会把声明和实现分离开位于鈈同的文件中。比如你定义一个类A首先创建一个.h文件,代码如下:

接下来你创建一个.cpp文件实现类的声明代码如下:

接下来就要使用这個类了,新建一个cpp文件代码如下:

可能你和我一样,按照上诉编程习惯来写类模板存在的问题这简直就是个遭遇!
将上面的类A改为类模板存在的问题,.h文件如下:

把.cpp文件改为如下:


 
main函数的.cpp文件代码改为:


此时运行错误发生。如果我们将类模板存在的问题的声明和定义寫在一个文件中呢即把.h和.cpp文件合并,得到如下代码:


这样在进行调试则没有错误。


所以我们得到:
类模板存在的问题不能将声明和實现分离在两个文件中!!


但是究其原因:
《C++编程思想》中这么说:模板存在的问题定义很特殊。由template<…>处理的任何东西都意味着编译器在當时不为它分配存储空间它一直处于等待状态直到被一个模板存在的问题实例告知。在编译器和连接器的某一处有一机制能去掉指定模板存在的问题的多重定义。所以为了容易使用几乎总是在头文件中放置全部的模板存在的问题声明和定义

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

可能有时候我们需要限定我们所编写的模板存在的问题的应用范围,我们可以通过丅面的方式实现.\
在实现之前我们应该简单的说明一下C++编译器对模板存在的问题的处理过程:
编译器遇到模板存在的问题定义时会进行语法检查,但不进行编译当编译器遇到遇到一个实例化\
的模板存在的问题时,才会编译出对应实例化类型的实例化代码进而生成目标文件,供我们链接\
程序时使用这似乎说明如果我们只是定义了模板存在的问题,而没有使用那么到最后我们的目\
标文件中是找不到模板存在的问题的踪影的,我们也就是抓住模板存在的问题的这个特性在实现模板存在的问题方法的\
源文件中添加模板存在的问题的对应类型的显示实例化,那么最后这个源文件也将只包含我们实例\
化后对应模板存在的问题类的定义如果某个类型我们没有在这个源文件中对其进行显示实例化,\
我们这个源文件生成的目标文件中将不会包含这个未实例化模板存在的问题的类的定义如果我们\
在其他文件中尝试模板存在的问题去实例化新的类型,将会出现连接错误

根据以上说明,我们的实现步骤大致如下:
1.模板存在的问题的声明放到一个头文件中\
2.模板存在的问题的实现放到另外一个源文件中\
3.在实现模板存在的问题的源文件中显示的特化本末班支持的类型\
下面我们给出一个测试程序

测试程序—-模板存在的问题声明头文件


 
测试程序—-模板存在的问题定义实现文件


 

 
}

我要回帖

更多关于 模板存在的问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信