[问题] c++ data member 地址

楼主: WangDaMing (王大明)   2021-01-10 11:26:37
开发平台(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));
}
作者: mmmmei (mmm煤)   2021-01-10 11:44:00
没有class的实体?噢抱歉没看到你文章有说没有实体也可以 有请大神
作者: sarafciel (Cattuz)   2021-01-10 12:07:00
应该是要补static 你是看侯捷的哪一本书?
作者: loveme00835 (发箍)   2021-01-10 12:27:00
https://bit.ly/3q5mqQL 先解决语法问题
作者: LPH66 (-6.2598534e+18f)   2021-01-10 12:38:00
offset 要取也不是这样取...同问是哪本书的哪一章
作者: loveme00835 (发箍)   2021-01-10 15:52:00
书里的程式码是用 printf() 来印 pointer to member吗?
作者: sarafciel (Cattuz)   2021-01-10 18:33:00
书里是用printf没错 书中是写说拿cout跟VC++会编译错误不过我拿VS2019试了一下 现在好像会直接重载决议到bool版本的operator去XD原PO你把括号拿掉 &(TEST::a)->&TEST::a 应该就是书里面要的东西了 不过网络公开版的书是有加那个括号没错所以我现在比较好奇到底是侯捷笔误 还是那个时候的VC++真的可以从这个expression解出来这个语意XD
作者: loveme00835 (发箍)   2021-01-10 18:50:00
有点惨.. 因为 printf() 就我所知没有 format string可支援 pointer to member. 这么不严谨的书还是先丢了吧
作者: F04E (Fujitsu)   2021-01-12 16:23:00
多型与虚拟的内容应该是非常早期的C++实作编译不能过或执行结果不同很正常如果你是要学C++那真的不要读这本

Links booklink

Contact Us: admin [ a t ] ucptt.com