Używam g ++ do kompilowania kodu z wypełnionymi polami. Jednak pojawia się błąd podczas próby zwrócenia odwołania do spakowanego pola.Dlaczego nie mogę zwrócić odniesienia do spakowanego pola?
Przykład:
struct __attribute__((packed)) Foo {
int* ptr;
uint16_t foo;
int*& getPtr(){
return ptr;
}
};
daje błąd:
test.cpp:22:14: error: cannot bind packed field ‘((Foo*)this)->Foo::ptr’ to ‘int*&’
return ptr;
Dlaczego nie mogę wrócić odniesienie do pola pakowane?
Jeśli jest zapakowany, pole może nie być prawidłowo wyrównane. –
@ T.C .: Czy istnieje sposób, aby powiedzieć gcc "Wyrównanie śrub, jestem na x86"? – gexicide
@gexicide 'return (int * &)ptr;' –