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

 
 
> Как сослаться на структуру typedef struct?, Из другого файла
Димон Безпарольн...
сообщение Jun 20 2017, 09:27
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



В одном хидере объявлена структура:

Код
typedef struct ADC_my2 {            //Структура для хранения сырых значений
    uint16_t    ADC_CH0;            //
    uint16_t    ADC_CH1;            //
    uint16_t    ADC_CH2;            //
    uint16_t    ADC_CH3;            //
    uint16_t    ADC_CH4;            //    
    uint16_t    ADC_CH5;            //
    uint16_t    ADC_CH6;            //
    uint16_t    ADC_CH7;            //    
}ADC_my;                            //
ADC_my ADC_RAW;                        //


Для того, чтобы были доступны ее элементы из другого файла нажно в его хидере объявить эту структуру как extern. Если я правильно понимаю. Как это сделать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Jun 20 2017, 10:34
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Код
// a.h
typedef struct A {int f; } AA;
extern AA a;

//b.cpp
#include "a.h" // тут будет включен полный текст файла а.h, в результате компилятор узнает, что есть тип АА и есть переменная а этого типа

// если бы мы не писали "extern AA a" в a.h, то это объявление пришлось бы писать везде, где нужна переменная "а".
// Если она нужна всего в одном файле, то стоит ее там и определить, причем как "static AA a;" static означает, что переменная локальная для файла
void f() { a.f = 2; }

// c.cpp
#include "a.h" // компилятор работает с каждым файлом отдельно. Тут он уже забыл про АА и а, надо включить снова

AA a; // выше мы только объявили "а". Где-то должно быть и определение, иначе будет ошибка линковки. Определение может быть в любом файле проекта
// но только в одном - если мы в a.h уберем extern, то объявление окажется в двух файлах (b.cpp и c.cpp), в результате будет ошибка линковки

void g() { a.f += 1; }


А вообще наройте книжку по Си и почитайте, это ж основы. Сложно учить язык методом проб и ошибок sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Димон Безпарольный   Как сослаться на структуру typedef struct?   Jun 20 2017, 09:27
- - Genadi Zawidowski   В хидеое должно быть так: extern ADC_my ADC_RAW; ...   Jun 20 2017, 09:29
|- - scifi   Цитата(Genadi Zawidowski @ Jun 20 2017, 12...   Jun 20 2017, 09:33
- - Димон Безпарольный   Не получается однако. Я так уже пробовал. Потому и...   Jun 20 2017, 09:37
|- - novikovfb   Цитата(Димон Безпарольный @ Jun 20 2017, 13...   Jun 20 2017, 09:40
||- - Димон Безпарольный   Цитата(novikovfb @ Jun 20 2017, 12:40) чт...   Jun 20 2017, 09:52
||- - novikovfb   Цитата(Димон Безпарольный @ Jun 20 2017, 13...   Jun 20 2017, 09:59
||- - Димон Безпарольный   Цитата(novikovfb @ Jun 20 2017, 12:59) Ни...   Jun 20 2017, 10:01
||- - Сергей Борщ   QUOTE (Димон Безпарольный @ Jun 20 2017, 13...   Jun 20 2017, 10:06
||- - Димон Безпарольный   Цитата(Сергей Борщ @ Jun 20 2017, 13:06) ...   Jun 20 2017, 10:08
||- - novikovfb   Цитата(Димон Безпарольный @ Jun 20 2017, 14...   Jun 20 2017, 10:15
||- - Димон Безпарольный   Цитата(novikovfb @ Jun 20 2017, 13:15) Об...   Jun 20 2017, 10:27
|- - Mareng   Цитата(Димон Безпарольный @ Jun 20 2017, 16...   Jun 20 2017, 09:41
|- - novikovfb   Цитата(Mareng @ Jun 20 2017, 13:41) Возмо...   Jun 20 2017, 09:43
- - Lagman   В .h (для примера main.h) файле обычно находится о...   Jun 20 2017, 11:16
|- - novikovfb   Цитата(Lagman @ Jun 20 2017, 15:16) В дру...   Jun 20 2017, 11:27
|- - Lagman   Цитата(novikovfb @ Jun 20 2017, 14:27) ex...   Jun 20 2017, 11:30
|- - novikovfb   Цитата(Lagman @ Jun 20 2017, 15:30) Можно...   Jun 20 2017, 12:00
- - Димон Безпарольный   Да, спасибо. Так все заработало. В хидере: Кодty...   Jun 20 2017, 11:32
- - Lagman   Цитата(Димон Безпарольный @ Jun 20 2017, 14...   Jun 20 2017, 11:36


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:06
Рейтинг@Mail.ru


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