1|error LNK1120: 1 个无法解析的外部命令(详细小问题解释)

由于自己写代码时有不严谨,这个错误碰到过不少次。
首先,根据百度知道上的解释:


这个问题的原因是有头文件,但是找不到实现。 有两个原因: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()打错了,这也是造成标题错误的一个原因。发现自己干了这档子事情的时候感到非常羞愧,不过看到朋友也干了这档子事儿后,莫名一阵开心 。 【1|error LNK1120: 1 个无法解析的外部命令(详细小问题解释)】




以上便是我到现在为止遇到的,之后遇到新的问题再继续追加。






附:vs2015中,类中声明的函数若未定义将不会报错。

    推荐阅读