Мне было интересно, почему этот код не скомпилирован с ошибкой, указав «Идентификатор члена неожиданно в функции ....», поскольку «этот» указатель указывает на отдельный объявленный объект в самом модуле, который делает его похожим на скрытый параметр в этом случае, поскольку использование «this» является рудиментарным, если класс является автономным (т.е. классы, которые не наследуют какие-либо другие классы), и не должен иметь значения при использовании этого «этого», в явном виде.этот указатель указывает на свойство класса, которое само является указателем
А также, учитывая, что использование «этого» для указания свойств, являющихся указателями, является незаконным (поскольку компилятор выдает ошибку), почему компилятор обнаруживает ошибки только по пользовательским методам (getdata1(), getdata2(), setdata1(), setdata2()) и считает конструкторы и деструкторы свободными от ошибок? (Ну, это говорит о том, что использование «это», чтобы указать на свойства, которые являются указателями не является незаконным, должен быть какой-то причиной этой ошибки.)
class sampclass {
private:
int *data1,*data2;
public:
sampclass(); // constructor
~sampclass(); // destructor
int getdata1() const {
return this->(*data1); // ERROR: Member identifier unexpected in function sampclass::getdata1() const
}
int getdata2() const {
return this->(*data2); // ERROR: Member identifier unexpected in function sampclass::getdata2() const
}
void setdata1(int data) {
this->(*data1)=data; // ERROR: Member identifier unexpected in function sampclass::setdata1(int)
}
void setdata2(int data) {
this->(*data2)=data; // ERROR: Member identifier unexpected in function sampclass::setdata2(int)
}
};
sampclass::sampclass() {
this->data1=new int(0); // assign default value of 0
this->data2=new int(0);
cout << "\nConstruction Successful\n";
}
sampclass::~sampclass() {
delete this->data1;
delete this->data2;
//data1=NULL;
//data2=NULL;
cout << "\nDestruction Successful\n";
}
int main() {
sampclass *obj=new sampclass;
cout << "data1: " << obj->getdata1() << "\ndata2: " << obj->getdata2() << endl;
obj->setdata1(10);
obj->setdata2(99);
cout << "data1: " << obj->getdata1() << "\ndata2: " << obj->getdata2() << endl;
delete obj;
obj=NULL;
cout << "End of program";
return 0;
}
Может кто-нибудь, пожалуйста, объясните мне причину этой ошибки брошенной компилятором? Я считаю, что за этим должно быть объяснение. Обратите внимание, что ошибки упоминаются как комментарии; существует всего 4 ошибки, и программа компилируется и функционирует по мере необходимости, когда все «this->» удаляются из кода (как и ожидалось).
Заранее спасибо.
Пары не требуются там; вы можете записать его как '* this-> data1'. – melpomene
Но здесь data1 является свойством sampclass, и для доступа к свойствам используется это -><имя свойства>, не так ли? Почему одно и то же соглашение не применяется к указателям? Plz объясняет. – hecate
@melpomene: Нет, если вы хотите сохранить свою работу :) –