记住那些小bug
文章平均质量分 57
猫咪的晴天
人,不能没有理想
展开
-
NULL不是关键字!
写了一个头文件,忘记包含iostream,结果就出现了错误,说NULL是未定义的标识符。今后要记住,NULL is not a keyword. It's an identifier defined in some standard headers. You can includ原创 2011-09-18 10:51:25 · 2039 阅读 · 0 评论 -
gcc error: 'class A' has no member named 'b':误用多态导致的错误
我读本科时候所用的程序设计教材上有这么一句话:“指向基类对象的指针可以指向该基类的公有派生类对象(注意反过来不成立),这是运行时多态性的基础。指向基类对象的指针指向派生类对象后,可以访问派生类对象中由基类继承下来的成员,但不能访问那些派生类对象自己增加的成员。” 为了更好地说明问题,简单写几行代码。我犯的错误就在于忘记了红字标注的内容。首先是a.h:class A{原创 2012-05-04 17:30:45 · 14320 阅读 · 0 评论 -
gcc error: undefined reference to + 类构造函数
我遇到这个错误,纯粹是收到IDE的毒害,导致自己傻子似的不知道程序是怎样被编译执行的。 为了详细解释,先写了一个头文件a.h如下:class A{ public: int a; A(); ~A();}; 再写一个源文件a.cpp如下:#include "a.h"A::A(){ a = 1;}A::~A(){}原创 2012-05-04 00:29:06 · 7978 阅读 · 1 评论 -
类模板中的友元声明
template class TreeNode{public : ...... template void SwapLR (TreeNode * t);private: ......}; 类模板中的友元声明还是有点讲究的。 最初的代码如下所示:template class TreeNode{public : ......原创 2012-03-08 09:32:45 · 7453 阅读 · 6 评论 -
泛型编程使用gcc编译器时的两个注意事项:关于typename和迭代器
其实,我想说的是,在使用模板类时要注意一点,即何时必须使用typename而不是class来指定模板类型形参。其实在C++神作《C++ Primer (特别版)》的第16章“模板和泛型编程”中已经说得很明白了。下面,我结合自己遇到的问题来讲讲。template bool Complete (TreeNode * t){ ...... ...... for (dequ原创 2012-03-07 21:07:45 · 2343 阅读 · 1 评论 -
warning: control reaches end of non-void function
用gcc编译一个程序的时候出现这样的警告:warning: control reaches end of non-void function它的意思是:控制到达非void函数的结尾。就是说你的一些本应带有返回值的函数到达结尾后可能并没有返回任何值。这时候,最好检查一下是否原创 2011-10-17 23:00:56 · 158880 阅读 · 10 评论 -
不要怀疑,结构体作为形参可以按引用传递!
写了个程序,出了问题,还以为结构体不能按引用传递。事实证明,我错了,我错误的原因也找到了,跟结构体的引用没有任何关系。罗嗦一点,把二叉树的非递归后序遍历代码和自己写的链栈GetTop函数贴在下面:template void PostOrderTraverse_I(TreeN原创 2011-09-26 09:42:42 · 6070 阅读 · 0 评论 -
Error: template argument uses local type
请看如下一段代码:template void PostOrderTraverse_I(TreeNode* t,void (*Visit)(ElemType& e)){ struct StackNode { TreeNode*原创 2011-09-25 21:45:04 · 3393 阅读 · 0 评论 -
gcc compiler warning: “will be initialized after/when initialized here”
先看看我为二叉树写的结点类:template class TreeNode{private: TreeNode* lchild; TreeNode* rchild;public: ElemType data; TreeN原创 2011-09-24 23:02:57 · 6480 阅读 · 0 评论 -
使用模板时不要忘记把NULL实例化!
下面是测试二叉树的诸函数时写的一段代码(参照了国外的经典教材、清华大学出版社的《数据结构C++语言描述》): TreeNode *root1; TreeNode *a,*b,*c,*d,*e,*f,*g,*h,*i; d = GetTreeNode(原创 2011-09-24 16:24:44 · 856 阅读 · 0 评论 -
new分配空间之后和delete释放空间之后
写了一个链表的程序,想实现一个ClearList函数,功能是清空链表,释放除头结点以外的所有空间。最初,我的实现如下:template void LinkList::ClearList(){ LNode* p=head->next; LNode*原创 2011-09-18 11:36:37 · 2772 阅读 · 0 评论 -
类属类的界面与实现应该放在同一个文件模块中
写了一个小程序,发现自己的一个知识点漏洞。比如说要写一个class C,通常我会写三个文件:C.h,C.cpp,main.cpp。这样写,一般没什么问题。可是,如果使用了类属机制,比如说在C.h中这样写:template class C{public:原创 2011-09-18 10:48:58 · 843 阅读 · 0 评论 -
动态二维数组按下标访问
下面的代码先申请一个动态二维数组,然后按照下标访问其中的元素。这是个很简单的问题,我只是想强调一下,顺便辟谣。因为之前看网上某些文章说c++申请动态二维数组是不能按照下标访问的,还要经过自己将下标转换为相对地址,理由是动态申请的二维数组,虽然行内存储空间连续,但是行间不连续。下面的代码告诉你,你可以放心地使用下标,经过测试的,没问题。#include using namespace std原创 2012-09-30 11:16:37 · 3411 阅读 · 0 评论