Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Область видимости и динамическое создание структур


Автор: Filosov 22.12.2008, 14:07
Существует структура:
Код

struct MyData
{...
 };


Из главной функции вызываются две другие:
Код

void main()
{MyData *start_str;
  MyData *end_str;
  ...    
  end_str = Add_elem(& tek_prog, * end_str, max_prog);
  ...
  start_str = Removing_elem(& tek_prog, * start_str);
  ...
} 
//----------------------------
MyData * Add_elem(int * nnn, MyData & eee, int max)
{...
  MyData *TempMyData = new MyData;
 ...
  return TempMyData;
}
//----------------------------
MyData * Removing_elem(int * nnn , MyData & sss)
{...
  delete sss;
...
}  

проблема в том, удалять структуру созданную в другой функции. Область видимости типа не та.
Как передать адрес или там еще чего чтоб можно было удалять енту структуру в другой функции?

Автор: Earnest 22.12.2008, 14:39
Цитата(Filosov @  22.12.2008,  15:07 Найти цитируемый пост)
Область видимости типа не та.

При чем здесь область видимости типа? Ты его что, внутри функции определяешь? Тогда ответ - никак.
А если не внутри, то тип должен быть определен там, где доступен всем работающим с ним функциям. Естественно. 
Цитата(Filosov @  22.12.2008,  15:07 Найти цитируемый пост)
MyData * Removing_elem(int * nnn , MyData & sss)
{...
  delete sss;
...
}  

Удалить можно указатель, но никак не ссылку.

Автор: DareDevil225 22.12.2008, 19:10
Вообще так не полагается делать, но уж если на то пошло то так надо

Код

void main()
{MyData *start_str;
  MyData *end_str;
  ...    
  Add_elem(& tek_prog, * end_str, max_prog, end_str);
  ...
  delete end_str;//когда необходимо
  ...
} 
//----------------------------
void Add_elem(int * nnn, MyData & eee, int max, MyData* pRetValue)
{...
  pRetValue = new MyData;
 ...
}



А на счет удаления в функции Earnest - прав, передавайте в функцию не ссылку, а указатель на объект.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)