Декларация переменной типа структуры в этой же структуре
От: oxid  
Дата: 14.10.05 16:33
Оценка:
Здравствуйте,
Подскажите пожалуйста как задекларировать переменную типа struct XX в структуре XX:


typedef struct tagXX
{
int var1;
XX var2;<---- Ошибка компилятора
}XX;


Пробовал написать struct tagXX; перед определением структуры но не помогает, можно только указатель на структуру использовать?
Трудно быть богом(с) A.C. и Б.С.
Re: Декларация переменной типа структуры в этой же структуре
От: jazzer Россия Skype: enerjazzer
Дата: 14.10.05 16:42
Оценка:
Здравствуйте, oxid, Вы писали:

O>typedef struct tagXX

O>{
O> int var1;
O> XX var2;<---- Ошибка компилятора
O>}XX;

попробуй посчитать размер твой структуры
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Декларация переменной типа структуры в этой же структуре
От: Erop Россия  
Дата: 14.10.05 16:47
Оценка:
Здравствуйте, oxid, Вы писали:

O>можно только указатель на структуру использовать?


Так точно, можно ещё ссылку, но это не очень понятно зачем
Ну и можно возвращать/передавать структуру из/в метод(ы/ов)
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Декларация переменной типа структуры в этой же структуре
От: __LP  
Дата: 14.10.05 16:47
Оценка: 1 (1)
Здравствуйте, oxid, Вы писали:

O>Здравствуйте,

O>Подскажите пожалуйста как задекларировать переменную типа struct XX в структуре XX:


O>typedef struct tagXX

O>{
O> int var1;
O> XX var2;<---- Ошибка компилятора
O>}XX;


O>Пробовал написать struct tagXX; перед определением структуры но не помогает, можно только указатель на структуру использовать?

Да, только указатель или ссылку. Но можно статическую переменную:

typedef struct tagXX
{
int var1;
static tagXX var2;
}XX;
C++ можно выучить за 21 день! ...если дни — полярные.
Re[2]: Декларация переменной типа структуры в этой же структ
От: oxid  
Дата: 14.10.05 16:54
Оценка:
Здравствуйте, __LP, Вы писали:

__L>Здравствуйте, oxid, Вы писали:


O>>Здравствуйте,

O>>Подскажите пожалуйста как задекларировать переменную типа struct XX в структуре XX:


O>>typedef struct tagXX

O>>{
O>> int var1;
O>> XX var2;<---- Ошибка компилятора
O>>}XX;


O>>Пробовал написать struct tagXX; перед определением структуры но не помогает, можно только указатель на структуру использовать?

__L>Да, только указатель или ссылку. Но можно статическую переменную:

__L>
__L>typedef struct tagXX
__L>{
__L>int var1;
__L>static tagXX var2;
__L>}XX;
__L>


Спасибо, разобрался, переменную на структуру нельзя создать потому что не известен ее размер,
однако не понятно почему можно создать статическую переменную, разъясните если не затруднит.
Трудно быть богом(с) A.C. и Б.С.
Re[3]: Декларация переменной типа структуры в этой же структ
От: __LP  
Дата: 14.10.05 17:07
Оценка: 2 (1)
Здравствуйте, oxid, Вы писали:

O>Здравствуйте, __LP, Вы писали:


__L>>Здравствуйте, oxid, Вы писали:


O>>>Здравствуйте,

O>>>Подскажите пожалуйста как задекларировать переменную типа struct XX в структуре XX:


O>>>typedef struct tagXX

O>>>{
O>>> int var1;
O>>> XX var2;<---- Ошибка компилятора
O>>>}XX;


O>>>Пробовал написать struct tagXX; перед определением структуры но не помогает, можно только указатель на структуру использовать?

__L>>Да, только указатель или ссылку. Но можно статическую переменную:

__L>>
__L>>typedef struct tagXX
__L>>{
__L>>int var1;
__L>>static tagXX var2;
__L>>}XX;
__L>>


O>Спасибо, разобрался, переменную на структуру нельзя создать потому что не известен ее размер,

O>однако не понятно почему можно создать статическую переменную, разъясните если не затруднит.

Потому что статическая переменная хранится вне структуры и не влияет на ее размер. Поэтому компилятору посчитать размер структуры проблемы не представляет.
C++ можно выучить за 21 день! ...если дни — полярные.
Re: Декларация переменной типа структуры в этой же структуре
От: Xander Zerge Россия www.zerge.com
Дата: 14.10.05 17:07
Оценка:
Здравствуйте, oxid, Вы писали:

O>Здравствуйте,

O>Подскажите пожалуйста как задекларировать переменную типа struct XX в структуре XX:


O>typedef struct tagXX

O>{
O> int var1;
O> XX var2;<---- Ошибка компилятора
O>}XX;


O>Пробовал написать struct tagXX; перед определением структуры но не помогает, можно только указатель на структуру использовать?


Не сложнее чем поместить внутрь трёхлитровой банки... другую трёхлитровую банку.
А если серьёзно, вы чего этим добиться хотите?
Серёжа Новиков,
программист
Re[2]: Декларация переменной типа структуры в этой же структ
От: oxid  
Дата: 14.10.05 17:12
Оценка:
Ещё один вопрос, не будет ли бесконечного цикла при создании этой структуры?


typedef struct tagCOMMANDINFO
{
    TCHAR                szName[MAX_PARAM_SIZE];
    tagCOMMANDINFO*                PreliminaryCommand;
    MessageParcerType    MessageType;

    tagCOMMANDINFO(): nResultSize(MAX_PARAM_SIZE)
    {
        memset( szName, 0, sizeof(TCHAR)*MAX_PARAM_SIZE );
        MessageType = MESSAGE_LIST;
        PreliminaryCommand = new tagCOMMANDINFO();
    }
    ~tagCOMMANDINFO()
    {
        if(PreliminaryCommand)
        {
            delete PreliminaryCommand;
        }
    }
}COMMANDINFO;
Трудно быть богом(с) A.C. и Б.С.
Re[3]: Декларация переменной типа структуры в этой же структ
От: __LP  
Дата: 15.10.05 07:26
Оценка: 2 (1)
Здравствуйте, oxid, Вы писали:

O>Ещё один вопрос, не будет ли бесконечного цикла при создании этой структуры?


O>
O>typedef struct tagCOMMANDINFO
O>{
O>    TCHAR                szName[MAX_PARAM_SIZE];
O>    tagCOMMANDINFO*                PreliminaryCommand;
O>    MessageParcerType    MessageType;

O>    tagCOMMANDINFO(): nResultSize(MAX_PARAM_SIZE)
O>    {
O>        memset( szName, 0, sizeof(TCHAR)*MAX_PARAM_SIZE );
O>        MessageType = MESSAGE_LIST;
O>        PreliminaryCommand = new tagCOMMANDINFO();
O>    }
O>    ~tagCOMMANDINFO()
O>    {
O>        if(PreliminaryCommand)
O>        {
O>            delete PreliminaryCommand;
O>        }
O>    }
O>}COMMANDINFO;
O>

Да, будет. Предлагаю сделать вложенную структуру item, в которой будет храниться указатель item* вместе с дополнительной информацией (MessageType, szName и т.д.) как это делается в списках.

class command_info
{
    struct item
    {
        item* next;
        //... какие-то данные 
        //... имхо полезно будет определить конструкторы
    };
    item* pitem;
    //...
public:
    command_info():pitem(new item()){...}
    ~command_info() {delete pitem;}
    //...
};

Так будет удобней. Еще неплохо, ИМХО, убрать typedef и проверку на ноль перед delete.
C++ можно выучить за 21 день! ...если дни — полярные.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.