![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| cupper |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
Есть хедер
proc_fs.h
мне нужно в другом хедере my.h определить функцию с использованием этого типа но без явного подключение этого хедера
Мне выдает ошибку
я ее понимаю как то что компилятор незнает что это за тип такой. Явно я немогу подключить этот хедер сюда, может зацикленный произойти. Если бы этот тип был обычной структурой я бы просто объявил в начале своего файла это структуру и оно потом бы где нить походу слинковалось, но это не структура и я не знаю как правильно можно объявить прототип этого типа в своем файле. Перенести typedef в свой файл тоже очень плохая идея. Это сообщение отредактировал(а) cupper - 23.4.2010, 18:03 |
||||||
|
|||||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
cupper, просто скопируйте этот typedef
|
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Используйте стражи включения или #pragma once PS Вообще необходимость такого взаимного включения говорит о плохом дизайне. Попробуйте выделить общие для этих двух заголовков элементы в отдельный Это сообщение отредактировал(а) Sartorius - 23.4.2010, 18:10 |
|||
|
||||
| cupper |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
если скопировать пишет что два раза определено, в моем и в первой хедере. Добавлено через 1 минуту и 19 секунд
это уже готовый проект в который не стоит вносить #pragma once, какой есть дизайн с таким приходится работать. Добавлено через 6 минут и 50 секунд скопировал tipedef но изменил его на
поправил в определении функции, теперь вот думаю в .c файле где идет реализация этой функции оставить прежний тип и надеятся что отделаюсь варнингом и он всетаки проебразует все корректно или там тоже заменить, но если заменить то придеться менять и по все функциях вызываемых из него что есть плохая идея. И вообще свяжетли комплятор реализацию функции в .с если у нее будет тип read_proc_t с ее определение в .h если там будет тип myread_proc_t ??? |
||||||
|
|||||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Ну назовите тип по другому. Какая разница как он назыается, вам же надо просто в func корректно стек этой функции заполнить и вызвать ее. Не понимаю почему нельзя добавлять директивы компилятора, а тип копипастить можно
|
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
директивы не добавляю потому что незнаю что получиться, а все что не знаю не делаю. Забыл указать что язык С, компилятор gcc. Скопировать тапйдеф это крайняя мера, и то я не знаю точно что получится. А изначально я хотел узнать как можно определенный таким образом тип данных объявить прототипом в другом файле, по типу как делают со структурами в одном файле ее описывают, в другом просто определяют struct xyz; Или как функции extern'ом... в общем хотел узнать можно ли в моем случае сделать что то подобное (без доп директив и копипаста) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Стражи включения типа #ifndef __MY_HEADER точно ничего не испортят. Более того, их не обязательно вносить сразу во все хедеры, можно по мере необходимости.
-------------------- ... |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
хммм, ну так они и есть в обоих, в каждом свой. |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
зачем поправлять ? два одинаковых тайпдефа не будут конфликтовать..
typedef определяет не новый тип, a псевдоним, т.е. в определение ссылается на главный тип.
будет порядок |
||||
|
|||||
| cupper |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
значит я чего то не понимаю, я уже говорил что копировал typedef и это тоже вызывало ошибку, вот она
|
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
кстати как может произойти зацикливание, когда proc_fs по отношению к вашему файлу библиотечный ? Добавлено через 1 минуту и 34 секунды
и почему у Вас redefinition в библиотечных файлах ? или Вы "свой линукс" пишете ? |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если действительно включать файл proc_fs нельзя, а тайпдеф нужен, то как решение вижу :
|
|||
|
||||
| cupper |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
они оба библиотечные, в одном определен необходимый тип (до меня), в другом определяю необходимую функцию (я). Долго описывать почему именно так. Добавлено через 2 минуты и 39 секунд
получится следующее: в этом файле не будет определна _LINUX_PROC_FS_H, добавиться необходимый мне typedef но при общей линковке опять таки возникнет два одинаковых определение. |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну тогда (раз у вас доступ к сорцам) пока не пришли сишники и не прояснили как в таких случаях поступать, вынесите определение тайпдефа в отдельный файл и включайте уже его куда надо.. Добавлено через 45 секунд или можно подумать, как избавиться от зацикливания.. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |