Я уже несколько часов борюсь с этой проблемой, и я искал каждый термин, который имел для меня смысл. Возможно, я даже уже прочитал соответствующий ответ, но не понял его как такового, потому что я немного смущен указателями.Возвращайте указатель от функции к объекту, инициализированному в main()
Итак, у меня есть структура, которая является частью объекта, который является частью цепочки объектов, которые «привязаны» (если можно так выразиться) в другом объекте, который сам является частью цепочки, которая является «привязано» к объекту привязки, инициализированному в основном.
struct values
{
double val, ues;
}
class small
{
public:
values vals;
}
class big
{
public:
small *small_anchor;
}
values &getPointerToStruct(big *con)
{
values *return_vals;
if(con->small_anchor->vals.val==10)
return_vals=con->small_anchor->vals;
return (&return_vals);
}
int main()
{
values *main_values=NULL;//This is supposed to be pointing to the "vals" struct contained inside the "small" object.
big *big_anchor;
big_anchor = new big;
big_anchor->small_anchor = new small;
big_anchor->small_anchor->vals.val=10;
big_anchor->small_anchor->vals.ues=5;
main_values = getPointerToStruct(&big_anchor);//now main_values should be pointing to the "vals" struct
//I want to manipulate the value INSIDE the object itself
main_values.val++;
}
Я попробовал все комбинации &
, *
и без префикса я не мог придумать, но ничего не даст результата я надеялся. «Самое близкое», что я получил, копировал «vals» (изнутри объекта) в «main_values», чтобы я мог манипулировать там значениями, которые мне не нужны, поскольку я хочу манипулировать ИСТОЧНИКОМ переменных.
Также обратите внимание, что я пропустил процесс прокрутки цепочек, чтобы добраться до объекта, который я пытался достичь, и что «return_vals» кажется произвольным, но бывает, что есть два возможных кандидата, которые могут быть структурой моя программа ищет, а «return_vals» содержит лучший кандидат, найденный до сих пор, и перезаписывается, когда найден лучший или возвращается, когда заканчивается процедура.
Используйте 'return * return_vals' _after_, вы фактически создали экземпляр' values' и указали указатель на 'return_vals', иначе вы получите UB. –
«Я пробовал каждую комбинацию' & ',' * '" - вы делаете это неправильно –