分離式編譯時 鏈接器工具錯誤 (一個變量被定義一次或多次)
阿新 • • 發佈:2017-12-19
效果 include private 可讀性 con lnk2005 可能 ring 生成
在編寫程序時,將類中的函數成員的聲明和定義分開,在頭文件(.h)中進行聲明,在源文件(.cpp)中進行定義
以及具體功能的實現。達到分離式編譯的效果,提高代碼的可讀性。
自己在編寫是程序時,程序顯示沒有錯誤,但是在生成時,產生了鏈接器工具錯誤LNK2005 的錯誤提示。這個錯誤
也會導致另外一個錯誤LNK1169 找到一個或多個多重定義的符號. 原因是在.cpp 文件內定義函數時加上了 inline
修飾符將函數聲明成了內聯函數。
內聯函數用於優化規模較小,流程直接,頻繁調用的函數。通常是將內聯函數在每個調用點上“內聯地 ”展開。
導致了在編譯過程中可能找到一個或多個多重定義的符號這樣的編譯錯誤。
但是直接在.h文件內對函數進行定義 加上 inline 修飾符沒有問題
eg:
Test.h
#pragma once
#include <string>
using namespace std;
class Test
{
public:
Test(const string &str) :s(str) {}
string fun();
private:
string s;
};
Test.cpp
#include "stdafx.h"
#include "Test.h"
inline
string Test::fun()
{
return s;
}
這樣編寫導致程序編譯錯誤,去掉inline後 程序正常運行。
分離式編譯時 鏈接器工具錯誤 (一個變量被定義一次或多次)