由于自己写代码时有不严谨,这个错误碰到过不少次。
首先,根据百度知道上的解释:
这个问题的原因是有头文件,但是找不到实现。
有两个原因: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中,类中声明的函数若未定义将不会报错。
本文解析了编译过程中因函数声明与定义不匹配导致的错误,分享了作者在编写二叉树节点类时忘记定义默认构造函数及主函数拼写错误所引发的问题。
&spm=1001.2101.3001.5002&articleId=53227732&d=1&t=3&u=25b35846aaea495da6c2e35075d4d198)
1026

被折叠的 条评论
为什么被折叠?



