Структура в заголовочном файле 1 нужна в заголовочном файле 2, как мне это сделать? - PullRequest
1 голос
/ 29 августа 2011

У меня есть структура, которую я использую в заголовочном файле1. Теперь мне также нужна эта структура в заголовочном файле file2, поскольку она используется в прототипах функций. Я включил заголовочный файл file1 в заголовочный файл file2, но это дает много жалоб на переопределение типов после компиляции? Есть ли простой способ сделать это? Я гуглил вложенные заголовочные файлы, но это дает мне довольно сложные статьи. Мне было интересно, есть ли простой способ сделать это?

Ответы [ 3 ]

3 голосов
/ 29 августа 2011

Конечно, есть. Используйте включая охранников .

file1.h

#ifndef FILE1_H
#define FILE1_H

/* Define everything here. */

#endif

Таким образом, вы можете включать file1.h снова и снова. В частности, вы всегда должны использовать include guard, если заголовок определяет вещей.

В качестве примечания: если вам не нужны детали структуры (то есть, это должен быть непрозрачный тип), вы можете использовать неполный тип и просто сказать struct yourstruct; вверху.

1 голос
/ 29 августа 2011

Я считаю, что ваши заголовочные файлы не защищены включенными защитными устройствами для предотвращения переопределений.Они должны быть

//header.h
#ifndef SOME_LONG_UNIQUE_NAME
#define SOME_LONG_UNIQUE_NAME

//header contents here

#endif

Как примечание: вам не нужны все определения заголовка и структуры только для объявления аргументов функции.Предварительного объявления достаточно.

struct C; //not including C.h
struct C* f(struct C* p);

Это уменьшает кодовую связь и ускоряет компиляцию

0 голосов
/ 29 августа 2011

Заголовочный файл 1:

#ifndef HEADERFILE1_H
#define HEADERFILE1_H

//...
#endif

Заголовочный файл 2:

#ifndef HEADERFILE2_H
#define HEADERFILE2_H

#include "headerfile1.h"

//...
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...