|
|
|
Объявление инстанцированного класса
|
|||
|---|---|---|---|
|
#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:23 |
|
||
|
Объявление инстанцированного класса
|
|||
|---|---|---|---|
|
#18+
Есть идея заменить объявление typedef на определение class с отрытым наследованием. Но в этом услучае прийдется повторять все конструкторы не по умолчанию и, возможно, туеву кучу операторов. А это не очень хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 13:31 |
|
||
|
Объявление инстанцированного класса
|
|||
|---|---|---|---|
|
#18+
а если так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 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+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 16:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34680482&tid=2028477]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 440ms |

| 0 / 0 |
