| проблема при class Foo: public Base<Foo> | |
| От: | kvser | ||
| Дата: | 27.05.08 04:35 |
| Здравствуйте! В примере:
Каким образом написать реализацию Foo::Foo в .cpp, чтобы не было ошибки линковки? |
| Re: проблема при class Foo: public Base<Foo> | |
| От: | alzt | ||
| Дата: | 27.05.08 05:29 |
| Здравствуйте, kvser, Вы писали: K>Каким образом написать реализацию Foo::Foo в .cpp, чтобы не было ошибки линковки? Линкер не знает, что есть такая функция. Необходимо явно указать какой тип нужен. здесь хорошая статья на эту тему Автор(ы): Валерий Лаптев Дата: 30.10.2004 В этой статье рассказывается о методах отделения реализации шаблона от его интерфейсной части и о том, как можно заставить это работать на популярных компиляторах наподобие MS Visual C++. |
| Re: проблема при class Foo: public Base<Foo> | |
| От: | VoidEx | ||
| Дата: | 27.05.08 05:31 |
| Здравствуйте, kvser, Вы писали: K>Каким образом написать реализацию Foo::Foo в .cpp, чтобы не было ошибки линковки? 1) Точно нет никакого base.cpp? 2) У вас в коде вообще нет Base, Subject только, это он? 3) main.cpp инклудит foo.h? Если на все вопросы ответ утвердительный, тогда foo.cpp так же неявно инклудит и base.h и имеет полное определение класса base, так что всё должно работать. У меня работает. |
| Re[2]: проблема при class Foo: public Base<Foo> | |
| От: | kvser | ||
| Дата: | 27.05.08 06:16 |
| Здравствуйте, VoidEx, Вы писали: VE>Здравствуйте, kvser, Вы писали: K>>Каким образом написать реализацию Foo::Foo в .cpp, чтобы не было ошибки линковки? VE>1) Точно нет никакого base.cpp? VE>2) У вас в коде вообще нет Base, Subject только, это он? VE>3) main.cpp инклудит foo.h? VE>Если на все вопросы ответ утвердительный, тогда foo.cpp так же неявно инклудит и base.h и имеет полное определение класса base, так что всё должно работать. VE>У меня работает. извините, вот поправки
|
| Re[2]: проблема при class Foo: public Base<Foo> | |
| От: | kvser | ||
| Дата: | 27.05.08 06:47 |
| Здравствуйте, alzt, Вы писали: A>Здравствуйте, kvser, Вы писали: K>>Каким образом написать реализацию Foo::Foo в .cpp, чтобы не было ошибки линковки? A>Линкер не знает, что есть такая функция. A>Необходимо явно указать какой тип нужен. вы хотите сказать, что компилятор не сделал инстанцирование? Но ведь в Foo.h все линкуется. Не линкуется только в Foo.cpp A>здесь хорошая статья на эту тему Автор(ы): Валерий Лаптев Дата: 30.10.2004 В этой статье рассказывается о методах отделения реализации шаблона от его интерфейсной части и о том, как можно заставить это работать на популярных компиляторах наподобие MS Visual C++. В статье описывается разделение интерфейса и реализации для шаблонных классов. У меня же нет такой задачи, у меня объявление шаблонного класса вместе с реализацией полностью находится в одном Base.h файле. (Subject читать как Base: поправка Автор: kvser )Дата: 27.05.08 |
| Re[2]: проблема при class Foo: public Base<Foo> | |
| От: | kvser | ||
| Дата: | 27.05.08 08:24 |
| Здравствуйте, VoidEx, Вы писали: VE>Здравствуйте, kvser, Вы писали: K>>Каким образом написать реализацию Foo::Foo в .cpp, чтобы не было ошибки линковки? VE>1) Точно нет никакого base.cpp? VE>2) У вас в коде вообще нет Base, Subject только, это он? VE>3) main.cpp инклудит foo.h? VE>Если на все вопросы ответ утвердительный, тогда foo.cpp так же неявно инклудит и base.h и имеет полное определение класса base, так что всё должно работать. VE>У меня работает. у меня gcc3.4.6 не компилирует |
| Re[3]: проблема при class Foo: public Base<Foo> | |
| От: | kvser | ||
| Дата: | 28.05.08 04:14 |
| Здравствуйте, kvser, Вы писали: K>у меня gcc3.4.6 не компилирует gcc4.2 компилирует |