![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 14.09.2011
Сообщений: 95
|
![]()
Салют!
Собст-но, 2 вопроса: Первый вопрос: почему в следующем коде первый случай работает, а второй не компилируется? Первый: Код:
Код:
И второй вопрос: Можно ли как нибудь в С++ сделать объявление класса в одном файле(без описания его параметров), мол, такой класс есть, и можно использовать, а описать его реализацию в другом файле? |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
Во втором случае так же отсутствует декларация BlockOf_Unit. Можно предположить, что отсутствие декларации BlockOf_Unit не влияет на способность кода быть скомпилированным. В первом случае используется указатель: Код:
Код:
Если предположение верно - ошибка компиляции во втором случае: "попытка использовать неполный тип", либо: "неизвестный тип" (что более вероятно. Ибо судя по сабжу, вы не знакомы с предварительным объявлением типов) Так как, вы не соизволили предоставить точный текст ошибки компилятора, а телепаты в отпуске - нельзя утверждать что либо более конкретное. Ответ на второй вопрос: Нет. Нельзя. Можно использовать предварительное объявление класса, и использовать указатели/ссылки на этот класс. Использовать неполный тип данных там, где компилятору критично знать его размер (а значит - строение класса) нельзя. /зы есть понятия "предварительное объявление класса", "объявление класса", "реализация класса". Это - три разных понятия. 1. Сообщаем компилятору, что такой класс есть: Код:
Код:
Код:
Объявленные но не реализованные классы можно использовать везде, как обычно. Но нельзя запускать нереализованные методы. Объявленные и реализованные можно эксплуатировать на всю катушку. Последний раз редактировалось _Bers; 29.07.2012 в 20:08. |
|
![]() |
![]() |
![]() |
#3 | ||
Пользователь
Регистрация: 14.09.2011
Сообщений: 95
|
![]()
КУонеяно же, у меня в конце опечатка.
Не BlockOf_Unit, а BaseOf_Unit, суд по приведенному коду. Цитата:
Цитата:
Да, с ошибками я оплошал...Вот: Код:
|
||
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
во втором случае - создание мембера класса, тип которого ещё не известен.
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 14.09.2011
Сообщений: 95
|
![]()
почему ж тогда первое прокатывает, интересно..
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Предположительно: перед декларацией класса ObjectsTable , существует предварительное объявление класса BaseOf_Unit
Что то вроде: Код:
|
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 14.09.2011
Сообщений: 95
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
посмотри на пример:
http://liveworkspace.org/code/ef5619...8198332cc0cfd3 Обрати внимание на ошибку компиляции. Если же расскомментировать предварительное объявление, то код скомпилируется. Если закомментировать - будет ошибка компиляции В твоём первом случае код компилируется только и только потому, что компилятору известно о существовании типа данных BaseOf_Unit Последний раз редактировалось _Bers; 29.07.2012 в 21:05. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 14.09.2011
Сообщений: 95
|
![]()
Хочу заметить, что предварительное объявление во втором случае не помогает, а в первом не играет роли....
|
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
В первом случае, где то выше по коду ты либо объявляешь предварительное объявление BaseOf_Unit , либо цепляешь его туловище целиком |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как связать данные столбцов между собой | Алексндр | Microsoft Office Excel | 4 | 17.07.2012 09:36 |
Подключение двух коммутаторов между собой?? | Makaveli1986 | Помощь студентам | 2 | 21.11.2011 09:45 |
связь пользователей между собой на сайте | строгийЁЖ | PHP | 5 | 05.08.2011 11:22 |
связать несколько компонентов dblookupcomboboxeh между собой. | D.O.G | БД в Delphi | 0 | 20.08.2010 14:27 |