Re: [問題] multiple definition in gcc?
.h檔中, 不應該宣告變數的實體...
如果要所有檔案接共用某變數
則在B.h中用 extern int m;
而在B.cpp中, 實作變數m的實體, 也就是 int m; (或者是 int m = 4;)
連結時, 把B.obj一起連結就可以了... (或者是把B.cpp加入方案也一樣)
※ 引述《rattler.bbs@bbs.ntu.edu.tw (好人可以裝酷嗎)》之銘言:
: 貼個很簡單的例子來說明multiple definition的問題..
: 有三個檔案b.c, b.h 和 main.c, 執行gcc b.c main.c之後,產生如下的錯誤訊息
: /tmp/ccWtXLur.o(.data+0x0): multiple definition of `m'
: /tmp/ccwfCTTj.o(.data+0x0): first defined here
: 我以為說, 用#ifndef __B_H__等行, 可以確保b.h只會被include一次,
: 但是似乎在main.c 以及b.c中的include "b.h", 皆執行了#include "b.h"此行,
: 因而造成multiple definition的問題.
: 不知道問題是在哪呢? 該如何做呢?
: 謝謝
: ==================================
: b.h:
: #ifndef __B_H__
: #define __B_H__
: int m = 4;
: #endif
: ----------------------
: b.c:
: #include "b.h"
: ----------------------
: main.c:
: #include "b.h"
: int main() {
: return 0;
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.64.224.244
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章