Здравствуйте, гость ( Вход | Регистрация )
|
Snake174 |
17.8.2012, 15:01
Сообщение
#1
|
![]() Студент ![]() Группа: Участник Сообщений: 89 Регистрация: 18.4.2011 Из: Миасс Пользователь №: 2613 Спасибо сказали: 9 раз(а) Репутация: 0
|
Всем привет.
Ситуация такая: пишу динамическую библиотеку. Нужно чтобы в конечном итоге получилось 2 файла (сама библиотека и заголовочный файл с объявлением функций). Заголовочный файл: Исходник: object.h object.cpp Вопрос такой: можно как-нибудь в файле header.h указать тип Object без включения в него object.h? Не хотелось бы таскать вместе с библиотекой эти файлы. Если в header.h прописать class Object, то при вызове в программе, к которой линкуется данная библиотека, выходит ошибка forward declaration и uninizialized struct Object. |
|
|
|
![]() |
|
wiz29 |
17.8.2012, 16:49
Сообщение
#2
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12
|
В вашем случае такой вариант не прокатит, т.к. в публичном интерфейсе вы возвращаете объект, который не собираетесь поставлять. Необходимо экспортировать класс Object и его заголовок тоже таскать.
примерно так:
|
|
|
|
|
Влад |
20.8.2012, 13:11
Сообщение
#3
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8
|
Цитата(wiz29 @ 17.8.2012, 17:49) Link В вашем случае такой вариант не прокатит, т.к. в публичном интерфейсе вы возвращаете объект, который не собираетесь поставлять. Необходимо экспортировать класс Object и его заголовок тоже таскать. Вот тут есть нюанс: если в публичном интерфейсе функция должна возвращать не объект, а только лишь указатель на него, то forward declarartion как раз и позволит "развязать" заголовки. Другое дело, что, даже имея указатель, но не имея описания самого класса, - нельзя будет обратиться к членам этого класса (дернуть там метод, или обратиться к полю...). Вот тут - придется всяко включать заголовок этого класса. |
|
|
|
Snake174 Предварительное объявление класса 17.8.2012, 15:01
Влад Используй forward declaration:
#ifndef HEADER_H
#d... 17.8.2012, 15:49
wiz29 Цитата(Влад @ 20.8.2012, 14:11) Вот тут е... 21.8.2012, 15:40
Iron Bug если интерфейс библиотеки работает с классом, то б... 17.8.2012, 20:09
Snake174 Спасибо всем за разъяснения. 20.8.2012, 4:21![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 2.1.2026, 20:01 |