Я пытаюсь понять статические элементы немного больше, и я экспериментировал с фрагментами кода, чтобы увидеть, что работает/является законным, а что нет.Доступ к частному статическому члену через экземпляр объекта
Я понимаю, что статическая переменная не находится внутри класса/структуры, но является отдельной. Другими словами, переменную y
в коде ниже следует получить по адресу A::y
, а не this->y
, поэтому мое предположение заключалось в том, что код ниже не будет компилироваться. Я был удивлен, что это произошло (MingGW).
Может кто-нибудь объяснить, как этот механизм доступа работает и реализуется.
// ClassA.h
class A{
private:
int x;
static int y;
public:
void setX(int x){this->x = x;}
void setY(int y){this->y = y;}
}
// main.cpp
#include "ClassA.h"
int main (int argc,char* argv[]){
A my_A;
my_A.setX(5);
my_A.setY(10);
return 0;
}
Статические переменные находятся в классе (они принадлежат самому классу). И по-прежнему можно получить доступ к статическому члену через оператор доступа к члену класса. – 0x499602D2
Почему я получаю сообщение об ошибке при компиляции кода? г ++ -o тест main.cpp '/tmp/cciEVrgm.o: В функции 'A :: SetY (INT)':. main.cpp :(text._ZN1A4setYEi [_ZN1A4setYEi] + 0x10): неопределенная ссылка to 'A :: y' collect2: error: ld received 1 exit status' –
Я не добавлял определение статического члена 'y' для простоты. Извини за это. –