При обращении к объекту по ссылке, вы должны использовать оператор .
для достижения своих членов:
void Some_Func(TheStruct &My_struct) {
My_struct.member = 4;
}
int main() {
TheStruct My_struct;
Some_Func(My_Struct);
// or:
// TheStruct *My_struct = new My_struct;
// Some_Func(*My_Struct);
// delete My_struct;
}
При доступе в г объект по указателю, вы должны использовать ->
или *.
оператору достичь своих членов:
void Some_Func(TheStruct *My_struct) {
My_struct->member = 4;
// or (*My_struct).member = 4;
}
int main() {
TheStruct My_struct;
Some_Func(&My_Struct);
// or:
// TheStruct *My_struct = new TheStruct;
// Some_Func(My_Struct);
// delete My_struct;
}
Если вы не хотите использовать оператор &
, чтобы получить адрес переменной объекта (может быть, потому что it overrides operator&
, например), вы можете использовать std::addressof()
в C++ 11 и более поздних версий:
int main() {
TheStruct My_struct;
Some_Func(std::addressof(My_Struct));
}
Или используйте boost::addressof
:
#include <boost/utility.hpp>
int main() {
TheStruct My_struct;
Some_Func(boost::addressof(My_Struct));
}
Или реализовать addressof()
вручную:
template<class T>
T* my_addressof(T& arg)
{
return reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char&>(arg)
)
);
}
int main() {
TheStruct My_struct;
Some_Func(my_addressof(My_Struct));
}
проблему XY снова. Зачем вам нужен указатель? –
Почему? Что не так с написанием 'My_struct.member = 4;'? – EJP
Ваша клавиатура лишена знака амперсанда или почему вы не хотите его использовать? Возможно, посмотрите здесь: https://www.google.de/search?q=cheap+keyboard&ie=utf-8&oe=utf-8&client=firefox-b-ab&gfe_rd=cr&ei=1b80WLzNIs7j8wel0J-4Ag#q=cheap+keyboard&tbm= shop & spd = 5151555981146022932 – kay