Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура в структуре 
V
    Опции темы
leporel
Дата 2.5.2010, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 12.2.2008

Репутация: нет
Всего: -1



Как к ней обратиться?

Допустим вот 
Код

struct notebook 
{
    char model[21];
    struct size{
        float x;
        float y; 
        float z;
    };
    float w;
    int price;
};


Это сообщение отредактировал(а) leporel - 2.5.2010, 20:56
PM MAIL   Вверх
Abyx
Дата 2.5.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



leporel, к такой - никак. ты не объявил ее поле. надо

Код

struct notebook 
{
    char model[21];
    struct size{
        float x;
        float y; 
        float z;
    }
    foo;   // <------------
    float w;
    int price;
};

notebook n;
n.foo.x = 1;


Это сообщение отредактировал(а) Abyx - 2.5.2010, 20:58
PM MAIL   Вверх
ncr
Дата 10.5.2010, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 10.5.2010

Репутация: нет
Всего: нет



Или сделать её неименованной:

Код

struct notebook 
{
    char model[21];
    struct         // <------------
    {
        float x;
        float y; 
        float z;
    }
    float w;
    int price;
};
notebook n;
n.x = 1;



Это сообщение отредактировал(а) ncr - 10.5.2010, 20:13
PM MAIL   Вверх
KOHCEPBATOP
Дата 11.5.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 21.4.2010

Репутация: 1
Всего: 1



Цитата(ncr @  10.5.2010,  20:11 Найти цитируемый пост)
Или сделать её неименованной:

ИМХО, плохой стиль. Не стоит демонстрировать новичку возможности языка, которые не стоит использовать.
PM MAIL   Вверх
GoldFinch
Дата 11.5.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



KOHCEPBATOP, 
единственный минус - это не переносимо, т.к. нестандартное расширение языка, при максимальном уровне предупреждений будет соответствующее предупреждение. В остальном, неименованные структуры это удобно.
PM MAIL ICQ   Вверх
KOHCEPBATOP
Дата 11.5.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 21.4.2010

Репутация: 1
Всего: 1



GoldFinch, какую тогда смысловую нагрузку они несут? В чем их преимущество перед именованными?
Структуры без тега ("struct  {") очень хреново отлаживаются в Borland C++.
PM MAIL   Вверх
GoldFinch
Дата 11.5.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



KOHCEPBATOP, их преимущество в удобном синтаксисе доступа к полям
особенно это заметно когда есть вложенные union'ы и struct'ы

Код

struct Foo
{
....................
    union
    {
        struct
       {
            short w0, w1;
       } w;
       int dw;
    } u;
....................
}


А Borland C++ мало кто пользуется.
PM MAIL ICQ   Вверх
KOHCEPBATOP
Дата 11.5.2010, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 21.4.2010

Репутация: 1
Всего: 1



GoldFinch, у тебя совсем другой пример. Посмотри пример ncr. У него описывается вложенная структура не только без тега, но и без идентификатора. 
Или ты хочешь сказать, что такой код:
Код

struct Foo
{
....................
    union
    {
        struct
       {
            short w0, w1;
       }; // <--------
       int dw;
    }; // <--------
....................
}

нормален?

Добавлено через 3 минуты и 26 секунд
Цитата(GoldFinch @  11.5.2010,  13:18 Найти цитируемый пост)
А Borland C++ мало кто пользуется. 

На самом деле "проблема" решается предельно просто - если в голову не приходит осмысленное название структуры, не стоит из-за этого терять время:
Код

struct Foo
{
....................
    union U
    {
        struct S
       {
            short w0, w1;
       } w;
       int dw;
    } u;
....................
}

PM MAIL   Вверх
GoldFinch
Дата 11.5.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



KOHCEPBATOP, действительно, идентификаторы я там зря написал =\

да, вполне нормальный код
PM MAIL ICQ   Вверх
JackYF
Дата 11.5.2010, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(KOHCEPBATOP @  11.5.2010,  09:53 Найти цитируемый пост)
которые не стоит использовать. 

Это кто так решил?

Цитата(GoldFinch @  11.5.2010,  11:03 Найти цитируемый пост)
это не переносимо, т.к. нестандартное расширение языка

Правда? А первая ссылка из гугла не согласна: http://www.cprogramming.com/reference/struct/declare.html. Впервые слышу, что неименованная структура не стандартна.

Цитата(KOHCEPBATOP @  11.5.2010,  11:37 Найти цитируемый пост)
Структуры без тега ("struct  {") очень хреново отлаживаются в Borland C++. 

Это личные проблемы этого компилятора.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
SVN74
Дата 11.5.2010, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(leporel @  2.5.2010,  20:56 Найти цитируемый пост)
Как к ней обратиться?


Код

#include <iostream>
using namespace std;
struct notebook
{
    char model[21];
    struct {
        float x;
        float y;
        float z;
    } size; // перемещаем сверху в низ
    float w;
    int price;
};

int main(int argc, char* argv[])
{
    notebook NBK;

        strcpy(NBK.model, "Hi this is my example");

        NBK.size.x = 0.56;
        NBK.size.y = 672.78;
        NBK.size.z = 10.45;
        NBK.w = 12.7654;
        NBK.price = 45231;

    cout << "model = " << NBK.model <<endl
         << "size: " << "| x = " <<NBK.size.x
                     << "| y = " << NBK.size.y
                     << "| z = " << NBK.size.z <<endl
         << "w = " << NBK.w <<endl
         << "price = " << NBK.price ;


    return 0;
}

(Turbo C++)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.