Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.88
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
#1

Конструктор шаблона класса - C++

06.07.2011, 18:16. Просмотров 3447. Ответов 6
Метки нет (Все метки)

Добрый день. Столкнулся с проблемой:
имеется код

C++
1
2
3
4
5
6
7
template <class L> class smthing {
    private:  
        ..... 
    public:
        smthing();
        .....
};
на попытку расписать конструктор вне определения класса:

C++
1
2
3
template <class L> smthing<L> :: smthing() {
    ......
}
компилятор выдает ошибку:

[BCC32 Error] smthing.h(24): E2316 'smthing<l>::smthing()' is not a member of 'smthing<l>'

Весь код в одном h-файле. Среда Embarcadero Rad Studio XE.

и вдогонку второй вопрос.
в Embarcadero Rad Studio XE строки типа:
C++
1
2
template <class link_element> struct link_record;
typedef link_record<link_element>* PLinkRec;
воспринимаются нормально, в то время как в Codegear C++ Builder выдает ошибку:
[BCC32 Error] file2.h(2): E2451 Undefined symbol 'link_element'

Так как же правильно пользоваться typedef'ом, имея шаблонный класс?

Заранее спасибо за ответы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2011, 18:16     Конструктор шаблона класса
Посмотрите здесь:

Конструктор-копирование шаблона класса - C++
Объясните пожалуйста, что я делаю не так.

Конструктор класса с инициализацией другого класса - C++
error C2064: term does not evaluate to a function taking 6 arguments Так же при наведении на SStria(...); Пишет: call of an object of...

Конструктор класса - C++
Имеется: class block{ public: block(int, int); private: int CoordX; int CoordY; }; block::block(int X, int Y){ CoordX =...

Конструктор класса - C++
Добрый вечер. Поясните кто может) Есть класс class Person { public: Person(void); ~Person(void); char Name; char...

Конструктор класса - C++
Я не могу понять вот эту запись class A{}; class B : public A {

Конструктор класса - C++
class A{}; class B : public A { B(); }; B::B() : A() /// ДЛЯ ЧЕГО ТУТ :A() И ЧТО ЭТО ОЗНАЧАЕТ??? { }

Конструктор класса - C++
Здравствуйте,не могу понять ,для чего нужен конструктор класса.Когда его нужно задавать

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
06.07.2011, 18:22     Конструктор шаблона класса #2
Paporotnik, Шаблонные typedef-ы насколько я помню нереальны. Можно typedef только для инстанцированного.
До С++0x по крайней мере. Но могу и ошибаться.
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
06.07.2011, 18:52     Конструктор шаблона класса #3
Можно внутри структуры этот typedef определить:
C++
1
2
3
4
 template <class link_element> struct link_record
 {
   typedef link_record<link_element>* PLinkRec;
 };
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
06.07.2011, 20:58  [ТС]     Конструктор шаблона класса #4
ForEveR, спасибо, похоже не правду. придется прописывать все целиком.

An1ka, предложенный вами вариант делает новый идентификатор доступным только внутри определения структуры. по крайней мере все объявления с ним вне её выдают ошибку "не удается разрешить идентификатор".

Проблема с конструктором пропала, как только воспользовался NetBeans'ом вместо Rad Studio.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
06.07.2011, 21:16     Конструктор шаблона класса #5
Paporotnik, странно... У меня, например, такой код нормально отрабатывает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
template< typename T >
class Foo
{
public:
    Foo();
};
 
template< typename T >
Foo< T >::Foo()
{
    std::cout << "Foo< "<< typeid(T).name() << " >::Foo()" << std::endl;
}
 
int main()
{
    Foo< int > bar;
 
    return 0;
}
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
06.07.2011, 21:39     Конструктор шаблона класса #6
Цитата Сообщение от Paporotnik Посмотреть сообщение
An1ka, предложенный вами вариант делает новый идентификатор доступным только внутри определения структуры. по крайней мере все объявления с ним вне её выдают ошибку "не удается разрешить идентификатор".
Ну правильно. Мы ведь не можем создать идентификатор неопределенного типа. Шаблон - это только заготовка. Для создания реальных объектов и использования вне шаблонной структуры нужно указывать тип:
C++
1
2
3
4
5
6
 template <class link_element> struct link_record
 {
   typedef link_record<link_element>* PLinkRec;
 };
...
link_record<int>::PLinkRec p;
Или :
C++
1
2
 template <class link_element> struct link_record;
typedef link_record< int>* PLinkRecInt;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2011, 09:14     Конструктор шаблона класса
Еще ссылки по теме:

Конструктор класса - C++
Пишу конструкцию #include &lt;iostream.h&gt; #include &lt;conio.h&gt; class MyClass { int a; public: void...

Конструктор класса - C++
задание: Класс кольцо. В классе определить поля с координатами центра кольца, большим и малыми радиусами, автовычисляемые поля с площадью и...

Конструктор класса - C++
Для чего используется второй конструктор, если при объявлении полей класса и так указывается их тип? class fraction { ...

Конструктор класса - C++
class NMClient{ public: NMClient(string IPServer, int Port); NMClient(string IPServer, int Port) { /*_Running =...

Конструктор класса - C++
Необходимо, чтобы при задании планеты (сферы) высчитывался гравитационный параметр, желательно в конструкторе. Данный код не компилируется,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.07.2011, 09:14     Конструктор шаблона класса #7
Цитата Сообщение от Paporotnik Посмотреть сообщение
"не удается разрешить идентификатор"
Используй typename
C++
1
typename link_record::PLinkRec ptr = 0;
Yandex
Объявления
07.07.2011, 09:14     Конструктор шаблона класса
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru