
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
24.07.2007, 13:23
|
|||
|---|---|---|---|
Объявление инстанцированного класса |
|||
|
#18+
Есть код в котором сначала объявляем класс, потом мы его определяем, как инстанцированный шаблон: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Компилятор орет: автор c.cpp:47: error: conflicting types for `typedef class A<int> X' c.cpp:35: error: previous declaration as `struct X' Как объявить класс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2007, 13:31
|
|||
|---|---|---|---|
Объявление инстанцированного класса |
|||
|
#18+
Есть идея заменить объявление typedef на определение class с отрытым наследованием. Но в этом услучае прийдется повторять все конструкторы не по умолчанию и, возможно, туеву кучу операторов. А это не очень хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2007, 15:15
|
|||
|---|---|---|---|
Объявление инстанцированного класса |
|||
|
#18+
а если так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2007, 15:24
|
|||
|---|---|---|---|
Объявление инстанцированного класса |
|||
|
#18+
Ёша если так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери Да, так компилит. Но это очень не удобно, если еще допустить классы лежат в разных пространствах имен и т.д. Вообщем вывод один - все дефениции прийдется повторять, пока результат не будет составлен из деклораций. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2007, 16:29
|
|||
|---|---|---|---|
Объявление инстанцированного класса |
|||
|
#18+
Akh пишет: > Автор: "Akh" > Есть код в котором сначала объявляем класс, потом мы его определяем, как > инстанцированный шаблон: > > class X; > > class B { > public: > B(X &) {}; > }; > > template<class T> > class A { > T t; > }; > > typedef A<int> X; > > > Компилятор орет: Правильно делает. Так нельзя делать, forward declaration класса X определяет новый тип данных X. А typedef НЕ определяет новый тип данных. Он только вводит синоним для существующего типа данных с новым именем. В итоге что получается. Ты говоришь фактически \'у меня есть класс X, который я опреледю позже. Но это будет класс\'. А потом говоришь - \'у меня есть тип A<int>, и я его буду называть отныне еще и как X\'. Но ты уже обещал, что X будет классом, а не синонимом для X. А то, что ты хочешь сделать, достигается с помощью forward declaration шаблона. А там , где тебе уже нужен X, пишешь typedef A<int> X; Т.е. template<typename T> class A; typedef A<int> X; ..... а потом где-то уже определяешь A полностью. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&tablet=1&tid=2028477]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 447ms |

| 0 / 0 |
