由于自己写代码时有不严谨,这个错误碰到过不少次。
首先,根据百度知道上的解释:
反正开始看到这些解释我是一脸懵逼的,但自己找到问题后,发现这个解释还是挺专业的。这个问题的原因是有头文件,但是找不到实现。
有两个原因:1.只包含了头文件,只有这个函数的声明,没有包含这个函数的实现(实现一般放在cpp文件中的)。所以只能通过编译,连接不成功。
2.另一个原因是函数的声明和实现都放在头文件中了,一般要把声明放头文件中,实现放在cpp文件中。这样每个#include该头文件的文件都会有一份该函数的实现,连接的时候,连接器不知道连接哪一个实现,于是报错。
接下来是我遇到这个错误的原因
1.
class BinaryTreeNode这是二叉树的结点类的一部分,而声明了却没有定义的默认构造函数正是造成标题错误的其中之一。所以就个人经验而谈,类中声明的函数结构请一定别忘了定义(简单两个大括号也好呀),不然标题这个错误找起来真心痛苦。
{
friend class BinaryTree;
private:
char element;//节点的数据域
BinaryTreeNode *leftChild;//结点的左孩子节点
BinaryTreeNode *rightChild;//结点的右孩子节点
public:
BinaryTreeNode();//默认构造函数
BinaryTreeNode(const char&ele)//给定数据域的值的构造函数
{
element=ele;
leftChild=NULL;
rightChild=NULL;
}
BinaryTreeNode(const char&ele,BinaryTreeNode*l,BinaryTreeNode*r)//给定数据值和左右孩子结点的构造函数
{
element=ele;
leftChild=l;
rightChild=r;
}
BinaryTreeNode*getLeftChild()const//返回该节点的左孩子节点
{
return leftChild;
}
BinaryTreeNode*getRighttChild()const//返回该节点的右孩子节点
{
return rightChild;
}
}
2.
void mian()细心的人可能发现主函数main()打错了,这也是造成标题错误的一个原因。发现自己干了这档子事情的时候感到非常羞愧,不过看到朋友也干了这档子事儿后,莫名一阵开心 。
{
}
以上便是我到现在为止遇到的,之后遇到新的问题再继续追加。
附:vs2015中,类中声明的函数若未定义将不会报错。