mrjbom
@mrjbom

Не работает структура объявленная в заголовочном файле?

Привет.
У меня объявлена структура в хеадере, но использовать её в main.c я почему то не могу.
Понятия не имею что ему не нравится, объявить переменную с типом структуры я могу, но обратиться к её члену я не могу.
Вот код:
header.h
#ifndef _HEADER_H_
#define _HEADER_H_

typedef struct htype {
	int num;
} htype_t;

#endif


main.c
#include "stdio.h"
#include "header.h"

htype_t htval;
htval.num = 10;

int main(int argc, char* argv[]) {
	printf("%i\n", htval.num);
}

Ошибочка:
$ gcc main.c -o prog
main.c:5:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
    5 | htval.num = 10;
      |      ^


В чём проблема?
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
#include <stdio.h>
#include "header.h"

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

	htype_t htval;
	htval.num = 10;

	printf("%i\n", htval.num);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@TheCalligrapher
Так а что это такое вообще: htval.num = 10;?

Это выглядит как инструкция (statement). В языках С и С++ инструкции могут находиться только внутри функций. Больше нигде. Это требование грамматики, т.е. элементарного синтаксиса этих языков. Зачем вы написали инструкцию в "чистом поле" за пределами функции? Это некорректно с точки зрения синтаксиса языка.

Упрощенно выражаясь, в С и С++ код пишется внутри функций, а не снаружи.

P.S. Ваш вопрос не имеет никакого отношения к "структуре, объявленной в заголовочном файле". Ни структуры, ни заголовочные файлы тут ни при чем.
Ответ написан
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
htype_t htval;
htval.num = 10;

А почему бы для разнообразия не писать по правилам языка, например так (если, таки, С):
htype_t htval = {.num = 10};
или так (если, таки, С++):
htype_t htval = {10};
или даже так:
htype_t htval;

int main(int argc, char* argv[]) {
    htval.num = 10;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы