1. 程式人生 > >error LNK1120: 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()打錯了,這也是造成標題錯誤的一個原因。發現自己幹了這檔子事情的時候感到非常羞愧,不過看到朋友也幹了這檔子事兒後,莫名一陣開心微笑

以上便是我到現在為止遇到的,之後遇到新的問題再繼續追加。

附:vs2015中,類中宣告的函式若未定義將不會報錯。