[問題] c++ data member 地址

看板C_and_CPP (C/C++)作者 (王大明)時間4年前 (2021/01/10 11:26), 4年前編輯推噓2(2019)
留言21則, 5人參與, 4年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC 問題(Question): 最近剛好看到侯捷的書,書中有個範例蠻特別的就去用GCC試試看 發現編譯會錯誤 書上說class就算沒變成object直取data member會是offset 可是我卻得到編譯錯誤 請問GCC不能這樣取得offset嘛?? 謝謝 錯誤結果(Wrong Output): .cpp: In function ‘int main()’: 1.cpp:13:31: error: invalid use of non-static data member ‘TEST::a’ printf("addr = %p\n",&(TEST::a)); ^ 1.cpp:9:7: note: declared here int a; 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) include <iostream> #include <cstdio> #include <cstring> using namespace std; class TEST{ public: int a; }; int main() { printf("addr = %p\n",&(TEST::a)); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.196.18 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1610249199.A.817.html

01/10 11:44, 4年前 , 1F
沒有class的實體?
01/10 11:44, 1F

01/10 11:45, 4年前 , 2F
噢抱歉沒看到你文章有說沒有實體也可以 有請大神
01/10 11:45, 2F

01/10 12:07, 4年前 , 3F
應該是要補static 你是看侯捷的哪一本書?
01/10 12:07, 3F

01/10 12:27, 4年前 , 4F
https://bit.ly/3q5mqQL 先解決語法問題
01/10 12:27, 4F

01/10 12:38, 4年前 , 5F
offset 要取也不是這樣取...
01/10 12:38, 5F

01/10 12:39, 4年前 , 6F
同問是哪本書的哪一章
01/10 12:39, 6F
多型與虛擬(github上有繁體公開版?) https://github.com/tianshilei1992/polymorphsim_in_cpp 116頁 Pointer to Data Members 是只有以前的Visual C++才能這樣做嘛?? ※ 編輯: WangDaMing (39.12.196.18 臺灣), 01/10/2021 12:52:41

01/10 15:52, 4年前 , 7F
書裡的程式碼是用 printf() 來印 pointer to member
01/10 15:52, 7F

01/10 15:52, 4年前 , 8F
嗎?
01/10 15:52, 8F

01/10 18:33, 4年前 , 9F
書裡是用printf沒錯 書中是寫說拿cout跟VC++會編譯錯誤
01/10 18:33, 9F

01/10 18:34, 4年前 , 10F
不過我拿VS2019試了一下 現在好像會直接重載決議到bool
01/10 18:34, 10F

01/10 18:35, 4年前 , 11F
版本的operator去XD
01/10 18:35, 11F

01/10 18:39, 4年前 , 12F
原PO你把括號拿掉 &(TEST::a)->&TEST::a 應該就是書裡
01/10 18:39, 12F

01/10 18:41, 4年前 , 13F
面要的東西了 不過網路公開版的書是有加那個括號沒錯
01/10 18:41, 13F

01/10 18:47, 4年前 , 14F
所以我現在比較好奇到底是侯捷筆誤 還是那個時候的VC++
01/10 18:47, 14F

01/10 18:49, 4年前 , 15F
真的可以從這個expression解出來這個語意XD
01/10 18:49, 15F

01/10 18:50, 4年前 , 16F
有點慘.. 因為 printf() 就我所知沒有 format string
01/10 18:50, 16F

01/10 18:50, 4年前 , 17F
可支援 pointer to member. 這麼不嚴謹的書還是先丟
01/10 18:50, 17F

01/10 18:50, 4年前 , 18F
了吧
01/10 18:50, 18F

01/12 16:23, 4年前 , 19F
多型與虛擬的內容應該是非常早期的C++實作
01/12 16:23, 19F

01/12 16:24, 4年前 , 20F
編譯不能過或執行結果不同很正常
01/12 16:24, 20F

01/12 16:25, 4年前 , 21F
如果你是要學C++那真的不要讀這本
01/12 16:25, 21F
文章代碼(AID): #1V-dFlWN (C_and_CPP)
文章代碼(AID): #1V-dFlWN (C_and_CPP)