1. 程式人生 > >解決 multiple definition of 問題

解決 multiple definition of 問題

原因:多個檔案包含同一個標頭檔案且標頭檔案.h沒有加上條件編譯。因為每個.h標頭檔案被編譯生成獨立的標示符,編譯器連結時就出現了重複定義的錯誤。

Methon 1:為每個標頭檔案加上條件編譯,避免該檔案多次引用時被多次解釋。

#ifndef TEST_H
#define TEST_H

#endif

Methon 2:Methon 1無效時,使用extern宣告變數/函式在其它檔案中定義。

// .h
#ifndef TEST_H
#define TEST_H

extern int a;
extern int func(int a, int b);

#endif
// .cpp
int
a = 10; int func(int a, int b){ return a+b; }

Methon 3: 在所有全域性變數/函式前加上static。

#ifndef TEST_H
#define TEST_H

static int a = 10;
static int func(int a, int b){
     return a+b;
}

#endif

相關推薦

解決 multiple definition of 問題

原因:多個檔案包含同一個標頭檔案且標頭檔案.h沒有加上條件編譯。因為每個.h標頭檔案被編譯生成獨立的標示符,編譯器連結時就出現了重複定義的錯誤。 Methon 1:為每個標頭檔案加上條件編譯,避免該檔案多次引用時被多次解釋。 #ifndef TEST_H #

C++ 解決 multiple definition of & previous definition here編譯錯誤

1、第一種可能是 一個函式多次重定義 應新增以下巨集定義 #ifndef TEST_H #define TEST_H #include //you code #endif 2、原始碼直接寫在標頭檔案.h裡沒有對應的.cpp檔案 需要每個函式前新增 inline

解決multiple definition of的方法

問題原因:     當多個檔案包含同一個標頭檔案時,並且你的.H裡面沒有加上條件編譯 #ifndef TEST_H #define TEST_H #endif 就會獨立的解釋,然後生成每個檔案生成獨立

總結了解決multiple definition of的方法

問題原因:     當多個檔案包含同一個標頭檔案時,並且你的.H裡面沒有加上條件編譯 #ifndef TEST_H #define TEST_H #endif 就會獨立的解釋,然後生成每個檔案生成獨立的標示符。在編譯器連線時,就會將工程中所有的符號整合在一起,由於,檔案中

[問題解決] multiple definition of `***'

make發現問題如下: 我是把  pthread_mutex_t VT_Mutex;   這一句寫在 init.h 裡面。然後很多檔案包含這個 init.h 。 一般在.h檔案中定義一個變數宣告時,在其他檔案中只要包含了這個.h檔案,編譯的時候就會獨立被編譯器解釋,

如何解決linux下編譯出現的multiple definition of錯誤

今天,在編譯quagga的過程中出現了multiple definition of的錯誤。該錯誤表示不同檔案對同一變數進行了重複定義。因此,可以從以下幾個方面來排查這個問題: 1. 是否定義了重複變數: 直觀來講,如果在已經引用的global.h中定義了變數v,那麼在本檔案

檔案編譯時出現multiple definition of `xxxxxx'的解決辦法

問題: 原來有單個檔案tcpclient.c,執行gcc -o tcpclient tcpclient.c可以順利完成編譯,並能與下載到目標板中的tcpserver成功通訊; 現在把tcpclient.c中的底層通訊部分抽取出來,單獨放到一個檔案中nettrans.c中,並

全域性變數 multiple definition of 問題解決方法

解決方法:1.給每一個頭檔案加上條件編譯:注:此方法不是解決上述問題的方法,只是解決multiple definition of的一個方法。 當多個檔案包含同一個標頭檔案時,而標頭檔案中沒有加上條件編譯,就會獨立的解釋,然後生成每個檔案生成獨立的標示符。在編譯器連線時

multiple definition of 問題解決方法

問題描述:有一個opt_process.h檔案,兩個.cc檔案都引用了這個.h檔案,在.h檔案中聲明瞭一些全域性變數,報錯 /tmp/ccBCSKoH.o:(.bss+0x0): multiple definition of longopts' /tmp/c

解決C++編譯出現的重定義問題:multiple definition of ’XXX‘錯誤

1 //file_NO2:hello.cpp 2 #include<iostream> 3 #include"hello.h" 4 using namespace std;

解決C++中multiple definition of問題

1.global.h #ifndef _GLOBAL_H #define _FACEDETECT_H struct People{ string name; int age;

編譯時產生multiple definition of 錯誤的解決方法

總結了解決multiple definition of的方法: 問題原因: (1)    當多個檔案包含同一個標頭檔案時,並且你的.H裡面沒有加上條件編譯 #ifndef TEST_H #define TEST_H #endif 就會獨立的解釋,然後生成每個檔案生成獨立的標

【C++】變數定義在.h標頭檔案導致 multiple definition of解決方法和根本原因

說明:出現這個錯誤,請你先檢查重複定義的變數是否是定義在了.h標頭檔案中,如果是,請您耐心的看完這篇文章,他會告訴你錯誤的根本原因。 如果你很著急,不想弄清楚原因,請直接按下面的方法更改: 假設重複定

鏈接錯誤:multiple definition of 'xxx' 問題解決及其原理

水管 及其 head 外部聲明 重復元素 img 一定的 原理 重復 內容借鑒 於CSDN炸雞叔 錯因 截圖: “multiple definition of ‘head‘ ”  “multiple definition of

multiple definition of `qMain(int, char**)'

發現 image com init tip 項目文件 efi 生成 天發 QT C++ 我上一分鐘運行地好好的,下一分鐘就無法通過編譯了。查了半天發現在IDE自動生成的項目文件.pro中 main竟然包含了兩遍。我對這表示很無語,我完全是通過IDE來操作,卻產生一些我不易察

Qt提示 multiple definition of `SystemMenuButton::SystemMenuButton(QWidget*)

為了防止以後編碼出現類似得錯誤,在這裡記錄下-------------------------------------------- 錯誤提示: F:\shined-PC(488AD2092F21)\build-InformationDelivery-Desktop_Qt_5_5_1_Min

C++ 惱人的multiple definition of X連結錯誤

1. 錯誤原因 首先查了一下C&C++從原始碼編譯到可執行檔案的過程: 1)預處理將偽指令(巨集定義、條件編譯、和引用標頭檔案)和特殊符號進行處理 2)編譯過程通過詞法分析、語法分析等步驟生成彙編程式碼的過程,過程中還會進行優化 3)彙編過程將彙編程式碼翻譯為目標機器指令的過

報錯:multiple definition of 和 first defined here

1、就只有一處定義了全域性變數,但還是報錯,提示重複定義。 2、檢查.h標頭檔案,已經避免重複包含了。 解決方法: 在.c程式中定義全域性變數,在.h檔案中使用extern 做外部宣告,供其他檔案呼叫。 參考連結: https://blog.csdn.net/manti

multiple definition of 變數重複定義

# vi test.c ------------------------------- #include <stdio.h> #include "test.h" extern i; extern void test1(); extern v

c語言重複定義 multiple definition of `Recusion'

c語言重複定義。。。。 我在標頭檔案(.h)中定義聲明瞭一個變數 int Recusion = 0;/*0,1*/ 然後在兩個.cpp檔案中使用 a.cpp -------------------------- Recusion = 1; b.cpp