RT
我實際遇到的問題是這樣的:(VC6.0)
1、zconst.h 里面 定義“const char* AAA[] = {"AAA0", "BBB1", "CCC2"};”
2、在 zzz.cpp 里面 #include "zconst.h",并且使用 AAA
3、在 main.cpp 里面 也 #include "zconst.h",并且使用 AAA
4、在 編譯的時候,報錯說 重復定義:“error LNK2005: "char const * * AAA" (?AAA@@3PAPBDA) already defined in main.obj”
5、我嘗試 ,將 AAA 改成這樣的定義:“const char AAA[][5] = {"AAA0", "BBB1", "CCC2"};”
編譯執行 一切OK
我的問題:為什么 “const char* AAA[] = {"AAA0", "BBB1", "CCC2"};” 會報錯??里面的道理是什么??
難道 “const char* AAA[] = {"AAA0", "BBB1", "CCC2"};” 這樣定義的 常量AAA 不是字串陣列?????
請解答下,謝謝
uj5u.com熱心網友回復:
變數需要在.cpp檔案中定義,在頭檔案里用extern宣告,然后在用的地方包含extern的頭檔案后就可以正常使用了。如樓主所說的,可以把
const char* AAA[] = {"AAA0", "BBB1", "CCC2"};
寫在 main.cpp 中,在 zconst.h 檔案中進行宣告:
extern const char *AAA[];
其它代碼不需要修改
uj5u.com熱心網友回復:
不要糾結各種常量了,這個世界上唯一不變的就是變化。用API WriteProcessMemory還能修改正運行的其它行程的記憶體里面的所謂常量呢!uj5u.com熱心網友回復:
不妨 使用 CStringArray !uj5u.com熱心網友回復:
那為啥 const char AAA[][5] 就可以??
const char AAA[][5] 就不需要 cpp里面定義,再在.h里面extern??
uj5u.com熱心網友回復:
建議不要太過于糾結這些問題,不過準確地說我也不知道原因。有些東西你可以很認真地追究根源,特別是對實際使用有很大影響的,而影響不大的,可以在未來“有空”時去研究研究,如果一開始就去糾結這些問題,對學習不利,你說是不是?uj5u.com熱心網友回復:
變數需要在.cpp檔案中定義,在頭檔案里用extern宣告,然后在用的地方包含extern的頭檔案后就可以正常使用了。
如樓主所說的,可以把
const char* AAA[] = {"AAA0", "BBB1", "CCC2"};
寫在 main.cpp 中,在 zconst.h 檔案中進行宣告:
extern const char *AAA[];
其它代碼不需要修改
uj5u.com熱心網友回復:
char型字串陣列寫得正確嗎?const char* AAA[] = {"AAA0"};
const char* AAA[][5] = {"AAA0", "BBB1", "CCC2"};
uj5u.com熱心網友回復:
char型字串陣列寫得正確嗎?
const char* AAA[] = {"AAA0"};
const char* AAA[][5] = {"AAA0", "BBB1", "CCC2"};
你這是嘛意思?
uj5u.com熱心網友回復:
const char* AAA[] = {"AAA0", "BBB1", "CCC2"};是3個字串指標的陣列 即 char* AAA[3]
而 const char AAA[][5] = {"AAA0", "BBB1", "CCC2"};
是 3個 長為5 的 字串 陣列
2者的差別在于 AAA[][5] 在記憶體中 是 連續的 。
uj5u.com熱心網友回復:
const char* AAA[] = {"AAA0", "BBB1", "CCC2"};
是3個字串指標的陣列 即 char* AAA[3]
而 const char AAA[][5] = {"AAA0", "BBB1", "CCC2"};
是 3個 長為5 的 字串 陣列
2者的差別在于 AAA[][5] 在記憶體中 是 連續的 。
uj5u.com熱心網友回復:
const char* AAA[] = {"AAA0", "BBB1", "CCC2"};
是3個字串指標的陣列 即 char* AAA[3]
而 const char AAA[][5] = {"AAA0", "BBB1", "CCC2"};
是 3個 長為5 的 字串 陣列
2者的差別在于 AAA[][5] 在記憶體中 是 連續的 。
就 ∵ 一個是連續的,另一個不連續,就區別對待??
我發現
const char TTT[] = "TTT111"; // 這個放在 .h中定義,多個cpp檔案include的話都沒問題
const char* YYY = "YYY";// 這個放在.h中定義,多個cpp檔案include的話 會報錯 重復定義
也有一樣的問題??????
uj5u.com熱心網友回復:
宣告 是說 “有這么一個東西(型別,名稱)”定義 是說 “ 這個東西是(型別,名稱,初值)”
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/93911.html
標籤:基礎類
