Arhn - архитектура программирования

Определять структуры друг относительно друга в C

Есть ли способ правильно определить структуры по кругу (в C)? Другими словами:

//struct struct1;  Is this ok??

struct struct2 {

    struct struct1* someStruct1Var;
    //Other variables
};

struct struct1 {
   //Some variables
   struct2* (*someFunc)(struct2* someStruct2Var);
}

Поведение, которое я в основном хочу, заключается в том, что первая структура имеет переменную, которая является указателем на экземпляр второй (которая является глобальной переменной, и будет существовать только 1). Затем я хочу, чтобы вторая структура имела указатели на функции, которые возвращают тип первой структуры. Я хочу такое поведение, чтобы реализовать базовые объектно-ориентированные классы/объекты. Если есть аналогичный метод, который может выполнить то же самое, это также было бы очень полезно. Опять же, мне нужна структура класса (struct1), содержащая указатели на функции, которые принимают в качестве аргументов и возвращают переменные типа объекта (struct2). Затем мне нужно, чтобы каждый объект имел ссылку на свою глобальную переменную класса (которая имеет тип struct1).

Спасибо!

03.03.2014

  • Почему бы не попробовать закомментированный код в первой строке? Это называется предварительным объявлением и делает именно то, что вы хотите. 03.03.2014
  • Единственное, что вы забыли, это ключевое слово struct при использовании struct2. Это C, а не C++, так что это необязательно, если вы не помогаете компилятору. 04.03.2014

Ответы:


1

Вы должны заранее объявить свой struct

typedef struct struct1 struct1;
typedef struct struct2 struct2;

struct struct2 {

    struct1* someStruct1Var;
    //Other variables
};

struct struct1 {
   //Some variables
   struct2* (*someFunc)(struct2* someStruct2Var);
}

Выполнение этого с помощью typedef поможет опустить ключевое слово struct для названия типа.

03.03.2014
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..