У меня есть код, где мне нужно использовать двойные указатели. В частности, мне любопытно, почему я не могу сказать &this
в контексте, где …
class Obj {
public:
void bar();
};
void foo(Obj **foopa)
{
// do etc with your foopa. maybe lose the foopa altogether. its nasty imo.
}
void Obj::bar()
{
// call foo(Obj **)
foo(&this); // Compiler Err: Address extension must be an lvalue or a function designator.
}
Lvalue? обозначение функции? Люблю слышать в ответ.
Поскольку «this» является специальным указателем, и вы не должны его менять, но вы можете сделать что-то вроде этого, не помещайте «Obj * t» в функцию, потому что она уничтожается в конце функции, поэтому она должна быть статичный.
class Obj;
Obj *t;
class Obj {
public:
void bar();
};
void foo(Obj **foopa)
{
// do etc with your foopa. maybe lose the foopa altogether. its nasty imo.
}
void Obj::bar()
{
// call foo(Obj **)
t = this;
foo(&t); // Compiler Err: Address extension must be an lvalue or a function designator.
}
Других решений пока нет …