ПрограммированиеФорумОбщее

Две структуры ссылающиеся друг на друга. Как? (5 стр)

Страницы: 1 2 3 4 5
#60
5:27, 20 апр 2010

Pokimon
> а для Си никакой форвард декларейшн не нужен.
  А тут:

struct A {
    struct B {};
    struct B *b;  // Что это, Берримор?
};

struct B {};
#61
8:15, 20 апр 2010

cNoNim
Это ж из дизассемблтрованного текста, показывает наверное, что в структуре someStruct  после 16 байтов прописана переменная структурного типа, в которой есть поле по смещению 28.

#62
8:29, 20 апр 2010

graveman
> Это ж из дизассемблтрованного текста, показывает наверное, что в структуре
> someStruct после 16 байтов прописана переменная структурного типа, в которой
> есть поле по смещению 28.
  Дизассемблированного, наверное, в дебаге. Вот и всё объяснение.

#63
9:48, 20 апр 2010

O! 5 страниц уже! Однако!

Для топик стартера:
В С++ существуют конкретные инструменты для решения конкретных задач. Для решения твоей надо использовать
forward declaration. То что покимон предложил называется elaborated type specifier и используется обычно чтобы отличать
имена типов от имен объектов, функций в случае их совпадения.

struct A {};

int A(struct A*); // переопределяем A как функцию

void f()
{
  struct A* a; //указатель на структуру

  A(a); //вызов функции

  struct A ab; //объект типа A
}}

В качестве дополнительной аргументации, могу предложить заинтересованным лицам
с помощью elaborated type specifier попытаться задекларировать шаблонный тип.

#64
11:22, 20 апр 2010

Zefick
> Что это, Берримор?
это какой то левый код... покимон такого не писал :)

struct A {
    struct B *b;  // Что это, Берримор?
};

struct B {};

здесь так то нету форвар декларашион.
нет именно потому что struct B может быть объявлен и в нутри struct A... а с форвард деклорашион такого не прокатит

#65
11:23, 20 апр 2010

eagle
а что твои слова значат если мы говорим о Си? без Си++?

#66
12:17, 20 апр 2010

eagle
Я пишу утилиту. Там есть три структуры, одна хранит вертексы, другая-фейсы, третья - вертекс юзер(описывает пользователя вертексов, т.е., фейсы, которые используют вершины). Каждый фейс имеет три члена структур типа вертекс юзер. В самой структуре вертекс юзер мне надо прописать указатель на фейс, ее содержащий.

typedef struct VertexUser_s
{
  VertexUser_s *next, *prev;

  struct Face_s* pFace;// фейс, который ее использует
}VertexUser;

//
typedef struct Face_s
{
  Face_s *next, *prev;      
  Vertex_s* Vertexs[3];  //вершины объекта
  
  VertexUser VertexUsers[3];//фейс - это пользователь трех вершин

}Face;


Как то я пробовал объявлять структуры так struct A; это прокатывало только с классами(class A;)
Поэтому, и начал тему, так как не хочется делать через void*.

Также этот вопрос возникал при разработке игрового меню(там у меня правят пока void*).

#67
13:11, 20 апр 2010

cNoNim
> а что твои слова значат если мы говорим о Си? без Си++?
Без понятия, Си не увлекаюсь.

graveman

struct Face;
struct Vertex;

struct VertexUser
{
  VertexUser *next, *prev;

  Face* pFace;// фейс, который ее использует
};

struct Face
{
  Face *next, *prev;      
  Vertex* Vertexs[3];  //вершины объекта  
  VertexUser VertexUsers[3];//фейс - это пользователь трех вершин
};
#68
14:34, 20 апр 2010

eagle
спасибо

Страницы: 1 2 3 4 5
ПрограммированиеФорумОбщее

Тема в архиве.