The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"g++ и шаблоны"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"g++ и шаблоны"  
Сообщение от dimus (??) on 18-Сен-07, 13:48 
Решил малость побаловаться с шаблонами и натолкнулся на странное поведение компилятора (или на свою криворукость :) ). Программа проще некуда:

#include <iostream>

using   namespace       std;

template <class Item> class Test
{
        public:
                Test();
};

Test<class Item>::Test()
{
        cout << "Я родился\n";
}

int     main( int argc, char* argv[] )
{
        Test<int>       test;
        return  0;
}

Только вот ну ни в какую не хочет компилироваться при помощи g++ :(
$ make
g++ -g app.o -o app
app.o(.text+0x160): In function `main':
app.cpp:18: undefined reference to `Test<int>::Test()'
*** Error code 1


Подскажите пожалуйтса, в чем косяк.
$ g++ --version
g++ (GCC) 3.4.6 [FreeBSD] 20060305

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "g++ и шаблоны"  
Сообщение от sascha on 18-Сен-07, 14:18 
template<class Item>
Test<Item>::Test()
{
        cout << "Я родился\n";
}

>[оверквотинг удален]
>$ make
>g++ -g app.o -o app
>app.o(.text+0x160): In function `main':
>app.cpp:18: undefined reference to `Test<int>::Test()'
>*** Error code 1
>
>
>Подскажите пожалуйтса, в чем косяк.
>$ g++ --version
>g++ (GCC) 3.4.6 [FreeBSD] 20060305

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "g++ и шаблоны"  
Сообщение от dimus (??) on 18-Сен-07, 14:33 
>template<class Item>
>Test<Item>::Test()
>{
>        cout << "Я родился\n";
>
>}

Спасибо. Сам только что это нашел у Страуструпа :)

"...В этом случае определение функции-члена stack должно быть дано где-то в другом месте, как это и было для функций- членов обычных, нешаблонных классов. Подобные функции так же параметризируются типом, служащим параметром для их шаблонного класса, поэтому определяются они с помощью шаблона типа для функции. Если это происходит вне шаблонного класса, это надо делать явно:

template<class T> void stack<T>::push(T a)
{
   *p++ = a;
}

template<class T> stack<T>::stack(int s)
{
   v = p = new T[sz=s];
}"

                    
Как говорится, век живи, век учись :)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру