реклама на сайте
подробности

 
 
> структуры, доступ к полям
Метценгерштейн
сообщение Feb 8 2015, 10:08
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



вот у нас структура, через typedef
Код
typedef struct abc_s {
  int aa;
  int bb;
} abc_t;

создаю переменную этого типа
Код
abc_t abc;

дальше, хочу присвоить значение полю aa в моей переменной
Код
abc.aa = 8;

выдает ошибку. Почему? И как правильно?

а затолкав в ф-ю - все нормально. Т.е. вне ф-ии нельзя, получается, проводить начальную инициализацию?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Feb 8 2015, 17:03
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Что-то у меня легко задается элемент структуры в майн-функции. Правда, я не пишу
typedef struct abc_s {
...
Зачем давать название структуре, если будет использоваться определение типа?
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 8 2015, 17:14
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Feb 8 2015, 20:03) *
Зачем давать название структуре, если будет использоваться определение типа?


Обычно, так по привычке выходит... Чтобы, если что, внутри структуры можно было написать нечто вроде struct abc_s *next_item; и никто это не обругал.
Go to the top of the page
 
+Quote Post
ohmjke
сообщение Apr 2 2015, 13:12
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094



Цитата(SM @ Feb 8 2015, 21:14) *
Обычно, так по привычке выходит... Чтобы, если что, внутри структуры можно было написать нечто вроде struct abc_s *next_item; и никто это не обругал.


Так а почему все-таки так нельзя делать?

Если просто выполнить typedef так:
Код
typedef struct
{
    int a;
    char b;
} test_t;

то все работает.

Но мне для связного списка как раз нужно поле с указателем на следующий элемент:
Код
typedef struct
{
    int a;
    char b;
    test_t *next;
} test_t;

вот так не работает, пиште "unknown type name". Но почему? Тип test_t ведь определен.

Приходится делать так:
Код
typedef struct
{
    int a;
    char b;
    struct test_t *next;
} test_t;


А чтобы потом в коде еще можно было сделать так:
Код
test_t *s_test;
s_test = s_test->next;

(ошибка "a value of type "test_t *" cannot be assigned to an entity of type "struct test_t *")

приходится добавлять test_t между идентификатором struct и фигурными скобками:
Код
typedef struct test_t
{
    int a;
    char b;
    struct test_t *next;
} test_t;


Сообщение отредактировал ohmjke - Apr 2 2015, 13:20
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Apr 2 2015, 13:40
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(ohmjke @ Apr 2 2015, 14:12) *
Так а почему все-таки так нельзя делать?


Ответ на вопрос "почему" читать тут:
http://stackoverflow.com/questions/252780/...t-so-often-in-c

CODE

typedef struct S_Tag
{
int a;
int b;

struct S_Tag* pNext;
} S ;

int _tmain(int argc, _TCHAR* argv[])
{
S struct1;
S struct2;

struct2.pNext = &struct1;

return 0;
}

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Метценгерштейн   структуры   Feb 8 2015, 10:08
- - SM   правильно вот так: abc_t abc = {8,9}; // по станд...   Feb 8 2015, 10:20
- - _Pasha   Цитата(Метценгерштейн @ Feb 8 2015, 14:08...   Feb 8 2015, 11:31
- - Метценгерштейн   я разобрался. нельзя одно поле инициализировать вн...   Feb 8 2015, 12:14
|- - SM   Цитата(Метценгерштейн @ Feb 8 2015, 15:14...   Feb 8 2015, 12:16
|- - SSerge   Цитата(SM @ Feb 8 2015, 19:16) Можно...   Feb 8 2015, 12:40
|- - SM   Цитата(SSerge @ Feb 8 2015, 15:40) Это да...   Feb 8 2015, 12:55
|- - ViKo   Цитата(SM @ Feb 8 2015, 20:14) Обычно, та...   Feb 8 2015, 17:20
||- - SM   Цитата(ViKo @ Feb 8 2015, 20:20) Попробов...   Feb 8 2015, 17:35
|- - SSerge   Цитата(ohmjke @ Apr 2 2015, 20:12) Но мне...   Apr 2 2015, 15:56
- - ViKo   Возвращаясь к стартовому вопросу... У меня всё раб...   Feb 8 2015, 17:39
|- - SM   Цитата(ViKo @ Feb 8 2015, 20:39) И я не п...   Feb 8 2015, 17:41
- - ViKo   Я же написал, что работает. В Keil. В Main вот так...   Feb 8 2015, 17:59
- - SM   Цитата(ViKo @ Feb 8 2015, 20:59) В Main в...   Feb 8 2015, 18:00
- - ViKo   Цитата(SM @ Feb 8 2015, 21:00) А вне Main...   Feb 8 2015, 18:06


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 07:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016