Вы не предоставили тот же код, который пытались скомпилировать. Всегда копировать и вставлять . В вашем коде говорится, что у вас нет синтаксически правильного объявления класса или объявления переменной, и что в вашем сообщении об ошибке говорится о «.i», когда вы заявляете, что используете только a->i
. Вот рабочий код:
#include <stdio.h>
class A {
public:
int i;
};
int main() {
A* a = new A();
int* i = &a->i;
printf("a: %p\na->i: %p\n", a, i);
return 0;
}
В конечном счете, синтаксис, который вы говорите , который вы пытались получить для адреса участника, был верным. Синтаксис сообщения об ошибке говорит, что вы пробовали a.i
. Это не работает, и по причине сообщения об ошибке дал. Переменная a
не является классом, структурой или типом объединения. Скорее, это указатель на один из этих типов. Вам нужно разыменовать указатель, чтобы получить член.
Когда я запускаю его, я получаю это:
$ ./a.out
a: 40748
a->i: 40748
Адреса одинаковы, потому что A
- простой класс, поэтому этот вывод следует ожидать. Первый член часто помещается в самом начале памяти класса. Добавьте в класс вторую переменную-член и получите ее адрес; тогда вы должны увидеть разные значения.