金慶的專欄
C++博客
::
首頁
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
::
423 隨筆 :: 0 文章 :: 454 評論 :: 0 Trackbacks
公告
我的隨筆
我的評論
我參與的隨筆
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
(502)
1. C/C++(166)
(rss)
2. 網(wǎng)游開發(fā)(108)
(rss)
3. Golang(20)
(rss)
4. Linux/Unix(30)
(rss)
5. 軟工與管理(44)
(rss)
6. Python(23)
(rss)
7. Erlang(18)
(rss)
8. Rust(16)
(rss)
9. 其它(77)
(rss)
隨筆檔案
(423)
2023年1月 (1)
2022年11月 (1)
2022年10月 (2)
2022年9月 (1)
2022年4月 (6)
2022年1月 (2)
2021年12月 (4)
2021年11月 (6)
2021年10月 (2)
2021年9月 (2)
2021年8月 (7)
2021年7月 (2)
2021年5月 (2)
2021年3月 (1)
2021年2月 (2)
2021年1月 (1)
2020年12月 (1)
2020年10月 (1)
2020年9月 (5)
2020年8月 (1)
2020年7月 (1)
2020年6月 (1)
2020年4月 (2)
2020年3月 (3)
2020年2月 (3)
2020年1月 (1)
2019年12月 (1)
2019年9月 (2)
2019年4月 (2)
2019年1月 (1)
2018年12月 (1)
2018年11月 (3)
2018年10月 (1)
2018年9月 (3)
2018年8月 (3)
2018年7月 (2)
2018年6月 (4)
2018年5月 (4)
2018年4月 (4)
2018年3月 (1)
2018年1月 (2)
2017年12月 (2)
2017年11月 (3)
2017年10月 (3)
2017年8月 (7)
2017年7月 (1)
2017年6月 (1)
2017年5月 (3)
2017年4月 (3)
2017年3月 (3)
2017年2月 (2)
2017年1月 (2)
2016年12月 (5)
2016年11月 (2)
2016年10月 (2)
2016年9月 (1)
2016年8月 (6)
2016年7月 (3)
2016年6月 (2)
2016年5月 (4)
2016年4月 (2)
2016年3月 (2)
2016年1月 (3)
2015年12月 (2)
2015年11月 (2)
2015年10月 (1)
2015年8月 (2)
2015年7月 (1)
2015年6月 (1)
2015年5月 (4)
2015年4月 (3)
2015年3月 (4)
2015年2月 (5)
2015年1月 (4)
2014年12月 (3)
2014年11月 (3)
2014年10月 (2)
2014年9月 (3)
2014年8月 (1)
2014年4月 (4)
2014年3月 (1)
2014年2月 (4)
2014年1月 (5)
2013年12月 (5)
2013年11月 (5)
2013年9月 (2)
2013年8月 (2)
2013年7月 (2)
2013年6月 (2)
2013年5月 (1)
2013年1月 (2)
2012年12月 (1)
2012年11月 (1)
2012年9月 (1)
2012年8月 (3)
2012年7月 (2)
2012年6月 (1)
2012年4月 (3)
2012年3月 (2)
2012年2月 (3)
2012年1月 (2)
2011年11月 (2)
2011年10月 (3)
2011年9月 (2)
2011年8月 (2)
2011年7月 (3)
2011年6月 (2)
2011年5月 (3)
2011年1月 (2)
2010年12月 (1)
2010年11月 (2)
2010年10月 (2)
2010年9月 (3)
2010年8月 (2)
2010年7月 (3)
2010年6月 (1)
2010年5月 (3)
2010年4月 (3)
2010年3月 (5)
2010年2月 (4)
2010年1月 (4)
2009年12月 (2)
2009年11月 (3)
2009年10月 (4)
2009年9月 (3)
2009年8月 (2)
2009年7月 (4)
2009年6月 (1)
2009年5月 (3)
2009年4月 (4)
2009年3月 (2)
2009年2月 (5)
2009年1月 (1)
2008年12月 (7)
2008年11月 (4)
2008年10月 (1)
2008年9月 (3)
2008年8月 (4)
2008年7月 (3)
2008年6月 (4)
2008年5月 (6)
2008年4月 (7)
2008年3月 (6)
2008年1月 (5)
2007年12月 (7)
2007年11月 (4)
2007年10月 (5)
2007年9月 (6)
2007年8月 (8)
2007年7月 (5)
相冊
公告照片
搜索
積分與排名
積分 - 653816
排名 - 25
最新評論
1.?re: boost::asio::spawn 將一統(tǒng)C++網(wǎng)絡(luò)庫
asio 成為C++首選網(wǎng)絡(luò)庫
--linda
2.?re: log4cxx中文輸出錯誤補(bǔ)丁
評論內(nèi)容較長,點擊標(biāo)題查看
--金慶
3.?re: mingw編譯OrzNet
能發(fā)送一個mingw編譯好的OrzNet庫給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯誤補(bǔ)丁
評論內(nèi)容較長,點擊標(biāo)題查看
--bigbad
5.?re: log4cxx中文輸出錯誤補(bǔ)丁
評論內(nèi)容較長,點擊標(biāo)題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯誤(11016)
2.?SVN中邪惡的replace(10937)
3.?VS2005編譯libevent(10404)
4.?混音算法的學(xué)習(xí)與研究(10183)
5.?C調(diào)用lua腳本的效率測試(9002)
評論排行榜
1.?VC6正在被拋棄(35)
2.?VS2005編譯libevent(21)
3.?"multiple definition of" 錯誤(18)
4.?C++引用優(yōu)于指針(17)
5.?ACE與ASIO之間關(guān)于Socket編程的比較(16)
"multiple definition of" 錯誤
"multiple definition of" 錯誤
在global.h定義了一個常量字符串,在多個cpp中包含該global.h.
// file: global.h
#ifndef GLOBAL_H
#define GLOBAL_H
const char * STR_TEST = "Hello world!";
#endif
結(jié)果鏈接時出現(xiàn)錯誤:
multiple definition of ‘STR_TEST’
雖然改為#define肯定行,但是盡量應(yīng)該用const量取代宏定義。
這里有個概念性錯誤。
const 變量默認(rèn)是 static 的,
但帶有 const 的不一定是 const 變量.
此處 STR_TEST 并不是常量,而是指向常量字符串的變量。
改為
const char * const STR_TEST = "Hello world!";
就可以了。
不過我又覺得改為
const char STR_TEST[] = "Hello world!"
更好。
posted on 2008-08-26 20:12
金慶
閱讀(11016)
評論(18)
編輯
收藏
引用
所屬分類:
1. C/C++
評論
#
re: "multiple definition of" 錯誤
2008-08-27 00:33
TheAnswer
const char * const STR_TEST = "Hello world!";
前面那個const可以去掉的 效果一樣的
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤
2008-08-27 08:59
Kevin Lynx
概念性問題而已。
const int a = 12; 表示a 是個常量
const char * STR_TEST = "Hello world!";表示STR_TEST指向的內(nèi)容是常量,但其本身(作為一個指針變量而言)不是一個常量。
所以:
char * const STR_TEST = ".." 即可
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤
2008-08-27 09:09
金慶
@TheAnswer
char * const STR_TEST = "Hello world!";
STR_TEST[0] = 'X';
會通過編譯,所以不能去掉前面的const.
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤[未登錄]
2008-08-27 09:48
raof01
const 變量默認(rèn)是 static 的?誰說的?
multiple definition并不是由其constness不正確而導(dǎo)致的。
char * const p = "....";(p為常量,存放在常量表中,鏈接時沒問題)或者static char * p = "....";(限制p的作用域為編譯單元,但p可修改)即可,因為字符串本身是字面常量,不能修改。
因此,你這里的錯誤是由于全局變量使用錯誤導(dǎo)致的,與const無關(guān)。按照你最初的定義,在多個cpp中包含該global.h就相當(dāng)于多次定義了STR_TEST。因此鏈接時會出錯。
const char STR_TEST[] = "Hello world!";這里有個拷貝操作,相當(dāng)于多用了一倍的空間。
建議你看看“C++:一些基礎(chǔ)知識”(
http://blog.chinaunix.net/u/12783/showart_548200.html
)3和4條
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤
2008-08-27 10:28
abettor
加了
#ifndef GLOBAL_H
#define GLOBAL_H
#endif
還出現(xiàn)重復(fù)定義?不解中……
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤
2008-08-27 10:29
theanswerzju
@金慶
會有運(yùn)行時錯誤的這位大哥
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤
2008-08-27 10:30
theanswerzju
@abettor
這個防護(hù)宏只能防止一個cpp里重復(fù)包含
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤
2008-08-27 10:56
komac
文章內(nèi)容有誤導(dǎo)性,定義一個常量在多個文件中使用如果是定義在頭文件中就會出現(xiàn)multi definition的錯誤,只需要把你想用的變量定義在cpp文件里面,然后在h文件里面用external關(guān)鍵字聲明即可。出現(xiàn)多次定義的原因是多次包含,雖然用了ifndef define endif 也不可以避免在多個不想干文件里面包含該頭文件所產(chǎn)生的錯誤。
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤[未登錄]
2008-08-27 10:57
raof01
@abettor,@theanswerzju
IMHO,你們對于變量的定義理解存在問題。參考“C/C++:如何理解復(fù)雜的聲明”(
http://blog.chinaunix.net/u/12783/showart_378340.html
)。
變量定義一次就分配一次存儲。多次包含global.h,則多次為STR_TEST分配空間。編譯器正常是因為分開編譯。鏈接異常是因為有多個存儲叫做STR_TEST,通過STR_TEST引用存儲存在二義性。
而且inclusion guard是防止一個h被重復(fù)包含,而不是在一個cpp里重復(fù)包含。最基礎(chǔ)的書籍關(guān)于這點也是很清楚的。
與inclusion guard無關(guān)。
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤[未登錄]
2008-08-27 10:58
raof01
@komac
你沒有理解博主的意思。
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤[未登錄]
2008-08-27 10:59
raof01
OMG!看了這么多留言才知道,只有kevin lynx和博主——當(dāng)然也包括本人——知道討論的是什么問題。
IMHO,其他人該好好鞏固一下基礎(chǔ)了。
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤
2008-08-27 13:23
金慶
@raof01
看了你的文章,很好,學(xué)到了 bitwise constant.
const char STR_TEST[] = "Hello world!";
確實多用了空間, 看來還是用 const char * const 好,這樣只需復(fù)制指針。
const 變量默認(rèn)是 static,應(yīng)該是C++標(biāo)準(zhǔn)說的吧。不然我的代碼就會編譯出錯。
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤[未登錄]
2008-08-27 13:43
raof01
@金慶
c++標(biāo)準(zhǔn)哪里有?把原話貼過來啊。
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤[未登錄]
2008-08-27 13:46
raof01
考慮這種情況:
void foo()
{
int const a = 10;
a++;
}
如果const默認(rèn)是static,那么上面的函數(shù)應(yīng)該等價于:
void foo()
{
static int a = 10;
a++;
}
可能嗎?
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤[未登錄]
2008-08-27 13:49
raof01
考慮這種情況:
void foo()
{
int const a = 10;
}
如果const默認(rèn)是static,那么上面的函數(shù)應(yīng)該等價于:
void foo()
{
static int a = 10;
}
可能嗎?
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤
2008-08-27 19:02
金慶
@raof01
更準(zhǔn)確的說法可能是:C++中const默認(rèn)為內(nèi)部鏈接的。
我本來不甚了了,現(xiàn)在查了C++標(biāo)準(zhǔn)終于清楚了。
C++ 2003 標(biāo)準(zhǔn)下載自:
http://d.download.csdn.net/down/167339/i2005reg
原文如下:
Annex C
3.5
Change: A name of file scope that is explicitly declared const, and not explicitly declared extern, has internal linkage, while in C it would have external linkage
Rationale: Because const objects can be used as compile-time values in C + +, this feature urges programmers to provide explicit initializer values for each const. This feature allows the user to put const objects in header files that are included in many compilation units.
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤
2008-08-27 21:18
komac
@金慶
This feature allows the user to put const objects in header files that are included in many compilation units.
的確無知了,不知道const還有這個用法,慚愧慚愧
回復(fù)
更多評論
#
re: "multiple definition of" 錯誤[未登錄]
2008-08-28 09:24
raof01
看來我的理解也不夠深刻……
回復(fù)
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
How are dtLinks created in NavMesh
C++ parameter passing rules
Naming Conventions for Accessors
Visual Studio 2019 Compiler Hangs
Fbx File Format Identifier
查找內(nèi)存錯誤
std::thread 中的異常會丟失調(diào)用棧
用賦值代替 protobuf CopyFrom()
vs2017 linux 編譯輸出改成 vs 格式
為 LiteIDE 添加選中標(biāo)記
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
欧美日韩精品久久免费
|
久久精品国产清自在天天线
|
久久精品人人做人人爽电影蜜月
|
91精品国产色综合久久
|
亚洲v国产v天堂a无码久久
|
久久国产精品77777
|
国产午夜精品久久久久免费视
|
久久毛片免费看一区二区三区
|
久久久久亚洲精品日久生情
|
久久久久久精品久久久久
|
久久国产精品无码HDAV
|
国产无套内射久久久国产
|
精品综合久久久久久888蜜芽
|
久久se精品一区精品二区
|
久久精品国产亚洲AV嫖农村妇女
|
久久久久久综合一区中文字幕
|
伊人久久大香线蕉亚洲
|
久久人人爽人人爽AV片
|
久久香蕉超碰97国产精品
|
亚洲精品无码久久久久久
|
久久精品国产亚洲AV不卡
|
久久久久免费精品国产
|
亚洲精品国产字幕久久不卡
|
久久久久99精品成人片欧美
|
久久久久久国产精品免费免费
|
国产亚州精品女人久久久久久
|
91超碰碰碰碰久久久久久综合
|
91精品国产综合久久婷婷
|
伊人久久大香线蕉av不变影院
|
久久久国产精品
|
91性高湖久久久久
|
久久精品国产免费一区
|
久久精品中文闷骚内射
|
亚洲国产一成人久久精品
|
日韩人妻无码一区二区三区久久99
|
亚洲乱亚洲乱淫久久
|
77777亚洲午夜久久多喷
|
99久久久精品
|
91久久成人免费
|
精品久久久久中文字
|
狠狠精品久久久无码中文字幕
|