Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mike_device
3 / 3 / 3
Регистрация: 11.05.2013
Сообщений: 139
#1

Рекурсивное определение типов - C++

14.10.2013, 14:44. Просмотров 534. Ответов 15
Метки нет (Все метки)

Здравствуйте, у меня возникла проблема.
Есть код
C++
1
2
3
4
5
6
7
8
typedef void* BaseType;
 
typedef element *ptrel;
 
typedef  struct  {
    basetype data;
    ptrel next;
} element;
Суть такова, что тип element используется до определения. Причем избежать этого невозможно. Нужно заствать это работать. Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2013, 14:44     Рекурсивное определение типов
Посмотрите здесь:

Рекурсивное определение действия лекарств - C++
Реакция организма на действие лекарственного препарата через n часов после инъекции выражается показателем Rn. Экспериментально...

Определение границ типов данных - C++
Задача такова. Требуется определить максимальные границы для основных типов данных, т.е. int, double, char, float. Вот набросал, в...

Шаблоны, рекурсия, определение типов std::function - C++
#include <tuple> #include <vector> #include <iostream> #include <functional> #include <type_traits> template<typename T> ...

Шаблоны и определение SSE типов на этапе компиляции - C++
Добрый вечер. Задача следующая: для каждого базового типа даных int, float и double есть свой intrinsic SSE тип - __m128i, __m128 и...

Определение типов. Приведение int к unsigned int - C++
При таком определении 5 рассматривается как int. Как при определении указать что 5 будет именно unsigned int? unsigned int n=5; ...

Рекурсивное сложение - C++
Дорогие друзья,объясните пожалуйста, если функция возвращает значение fib(n-1) + fib(n-2); при значении к примеру n=5,какой будет...

Рекурсивное наследование - C++
Доброго времени суток. Допустим, у нас есть файл fst.h: #include <snd.h> class Fst { Snd b; // Snd was not...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
14.10.2013, 14:52     Рекурсивное определение типов #2
Цитата Сообщение от Mike_device Посмотреть сообщение
Суть такова, что тип element используется до определения. Причем избежать этого невозможно. Нужно заствать это работать. Спасибо!
Если до определения то указатели нужно использовать, попробуй как то так:
C++
1
2
3
4
5
6
7
8
typedef void* BaseType;
 
typedef element *ptrel;
 
typedef  struct  {
    basetype* data;
    ptrel* next;
} element111;
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 14:55     Рекурсивное определение типов #3
C++
1
2
3
4
5
6
7
8
9
typedef void* BaseType;
 
struct element;
typedef element *ptrel;
 
struct element {
    BaseType data;
    ptrel next;
};
Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
попробуй как то так
Ой, гуру-гуру ...

ninja2
14.10.2013, 15:13
  #4

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Ой, гуру-гуру ...
Ну я не буду за него все явные ошибки исправлять, которые и так видно не вооруженным глазом, типо определил Basetype а записал basetype.

Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 15:21     Рекурсивное определение типов #5
ninja2, да не в этом же дело. Про предварительное объявление слышал?
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
14.10.2013, 15:55     Рекурсивное определение типов #6
Цитата Сообщение от Tulosba Посмотреть сообщение
ninja2, да не в этом же дело. Про предварительное объявление слышал?
Да, а если у меня в классе есть методы ну например такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace::std;
 
class A;
 
class B
{
    A aa;
public:
    B(){aa.print();}
};
 
class A
{
public:
    void print(){cout <<"print A"<<endl;}
};
 
int main()
{
    B ab;
 
    return 0;
}
Как нам быть тогда???

Добавлено через 21 минуту
Ладно нужно через указатель делать, иначе компилятор ругается:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace::std;
 
class B;
 
class A
{
    B* bb;
public:
    A();
    void print();
};
 
class B
{
    A* aa;
public:
    B();
    void print();
};
 
A::A(){bb->print();}
B::B(){aa->print();}
void B::print(){cout <<"print B"<<endl;}
void A::print(){cout <<"print A"<<endl;}
 
int main()
{
    B ab;
    A ba;
 
    return 0;
}
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 15:55     Рекурсивное определение типов #7
Цитата Сообщение от ninja2 Посмотреть сообщение
Как нам быть тогда???
Переносишь класс А в начало и убираешь предварительное объявление. Оно вообще не нужно. Тут же нет взаимных ссылок.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
14.10.2013, 15:56     Рекурсивное определение типов #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Переносишь класс А в начало и убираешь предварительное объявление. Оно вообще не нужно. Тут же нет взаимных ссылок.
А если класс А использует класс B, а класс B использует класс А, как тогда нам быть???
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 15:58     Рекурсивное определение типов #9
Цитата Сообщение от ninja2 Посмотреть сообщение
А если класс А использует класс B, а класс B использует класс А, как тогда нам быть???
Сам же ответ знаешь.
Цитата Сообщение от ninja2 Посмотреть сообщение
Ладно нужно через указатель делать, иначе компилятор ругается:
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
14.10.2013, 15:59     Рекурсивное определение типов #10
Нужно делать вначале объявление двух классов сначала с указателями не с объектами, а затем уче определять методы, тут ключевой момент именно через указаетли иначе будет выдавать ошибку типо использование класса без определения.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 16:41     Рекурсивное определение типов #11
ninja2, если класс А включает в себя экземпляр (не ссылку или указатель) класса Б, а класс Б включает в себя экземпляр класса А, то такая ситуация неразрешима.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
14.10.2013, 17:47     Рекурсивное определение типов #12
Tulosba, Ну да.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,482
Записей в блоге: 4
14.10.2013, 18:27     Рекурсивное определение типов #13
Mike_device, Mike_device,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <windows.h>
using namespace std;
//использование тега в С-стиле (от struct до закрывающей фигурной }
typedef struct{
    int a;
    int b;
}
TypDefName;//это новое имя
//это в С++ выглядит:
struct UnTypDefName{
    int a;
    int b;
};
//вариация вслепую
typedef void* BaseType;
typedef  struct  Vasya{
    BaseType data;
    Vasya *self_point_ptr;
} element;
 
typedef element ptrel;
 
int main()
{
SetConsoleCP (1251); SetConsoleOutputCP (1251);
TypDefName struct_obj = { 1, 2};
UnTypDefName struct_another_obj ={3, 4};//то есть другой способ задания имени
//то есть Вы пытаетесь при помощи typedef определить имя element
//двумя разными типами
//при этом ещё один и не определён, но об этом сказали, хотя мне не понятно:
//что делать задумали?
cout<<endl;
system("pause"); 
    return 0;
    }
Tulosba
14.10.2013, 18:31
  #14

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
хотя мне не понятно: //что делать задумали?
это ж обычный односвязный список

IGPIGP
14.10.2013, 19:17
  #15

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
это ж обычный односвязный список
Так вот он какой... северный список? Теперь понятно, за что коэффициенты и надбавки.
Может и односвязный. Только необычный он кажется.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2013, 19:28     Рекурсивное определение типов
Еще ссылки по теме:

Рекурсивное вычисление - C++
Доброе время суток!!! Помогите пожалуйста решить две задачи с помощью рекурсии. За ранее огромное спасибо!!! Задача №1. Написать...

Рекурсивное умножение матриц - C++
С чего начать в первую очередь чтобы понять как реализовать рекурсивное умножение матриц? напишу обычную функцию для умножения матриц: ...

Рекурсивное умножение матриц - C++
Надо написать рекурсивную процедуру умножения двух матриц. Как оформить? Что делать? Кто напишет - тому пирожок :)

Рекурсивное построение дерева - C++
Здравствуйте ! Как построить рекурсивным образом дерево?

Рекурсивное вычисление НОК - C++
return (b &lt; 1 ? (b ? NOK(b, a % b) : a) : (a / -NOK(-b, -a % b) * b)); // РЕБЯТА ОБЪЯСНИТЕ ПОЖАЛУЙСТА ЭТУ СТРОЧКУ. СРОЧНО НУЖНО!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,387
Записей в блоге: 17
14.10.2013, 19:28     Рекурсивное определение типов #16
Запутывать классы/структуры предобъявлениями само по себе не хорошо - нужно избегать такого...
Yandex
Объявления
14.10.2013, 19:28     Рекурсивное определение типов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru