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()打错了,这也是造成标题错误的一个原因。发现自己干了这档子事情的时候感到非常羞愧,不过看到朋友也干了这档子事儿后,莫名一阵开心 。



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




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

你可能感兴趣的:(1,个无法解析的外部命令)