Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает программа, шаблонный класс 
V
    Опции темы
Annuta
Дата 1.7.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 3.10.2006
Где: Dubna

Репутация: нет
Всего: 1



Написала простенький шаблонный класс
Код

#include "TTrack.h"
template <typename T, int columns, int rows>
TTrack<T, columns, rows>::TTrack()
{
    p = new T(columns*rows);
    for(int i=0; i < rows; i++)
        for(int j=0; j < columns; j++)
            *(p+i*columns+j)=1;
}

template <typename T, int columns, int rows>
void TTrack<T, columns, rows>::Print()
{
    for(int i=0; i < rows; i++)
        for(int j=0; j < columns; j++)
            cout<<"Template matrix "<<*(p+i*columns+j)<<endl;
}


Код

#ifndef TTrack_H
#define TTrack_H
#include <iostream>

using namespace std;

template <typename T, int columns, int rows>
class TTrack
{
    T *p;
    public:
        TTrack();
        void Print();
};

#endif

 пытаюсь использовать так:
Код

main.cpp 

TTrack<int, 4,5> Matrix;

каманда make собирает исполняемый файл без ошибок, но при попытке запустить его я получаю такую ошибку
Код

main.o: In function `main':
main.cpp:(.text+0x649): undefined reference to `TTrack<int, 4, 5>::TTrack()'
collect2: ld returned 1 exit status
make: *** [MTrack] Ошибка 1

не понимаю, что не так...  Помогите плиз разобраться ... Ubuntu 10.04 gcc version 4.4.3 


--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
dengalf
Дата 1.7.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.4.2009

Репутация: нет
Всего: нет



если не ошибаюсь
Код

int t;
TTrack<t, 4,5> Matrix;

PM MAIL   Вверх
SenkraD
Дата 1.7.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: нет
Всего: 23



Annuta,  я так понимаю, что у вас для класса есть и хедер и срр-файл?
Если да, то это не верно!!! - компилятор должен видеть реализацию шаблона везде -
перенесите его реализацию в хедер под обьявление или напишите inplace реализацию

Конструктор у вас, кстати, неверный - там квадратные скобочки для new нужны


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Annuta
Дата 1.7.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 3.10.2006
Где: Dubna

Репутация: нет
Всего: 1



dengalf 
нет ... у меня так ничего не работает.
T - typename - так вроде нельзя писать, как ты предлагаешь...

SenkraD
Спасибо! Ща попробую!

Это сообщение отредактировал(а) Annuta - 1.7.2010, 13:05
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
SenkraD
Дата 1.7.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: нет
Всего: 23



dengalf,  не готите пожалуйста!
Если шаблону и можно засунуть переменную, то она должна быть
константой времени компиляции или иметь внешнее связывание


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
dengalf
Дата 1.7.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.4.2009

Репутация: нет
Всего: нет



Ага, сорри, недоглядел smile 
PM MAIL   Вверх
Annuta
Дата 1.7.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 3.10.2006
Где: Dubna

Репутация: нет
Всего: 1



SenkraD, СПАСИБО! 

Супер! Всё работает! 
У меня только такой вопрос, шаблонные классы в принципе всегда так пишутся без cpp файла ? Всё пишут в хедаре ? 

И ещё, что такое inplace реалзиция ? 







Это сообщение отредактировал(а) Annuta - 1.7.2010, 13:10
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
SenkraD
Дата 1.7.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: нет
Всего: 23



Annuta, ага. Рекомендую вам эту книгу, там многое обьяснят и укажут альтернтивы


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Annuta
Дата 1.7.2010, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 3.10.2006
Где: Dubna

Репутация: нет
Всего: 1



SenkraD, Спасибо!

Вопрос решён smile )
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1079 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.