реклама на сайте
подробности

 
 
> WinAVR, G++, template, linking, Помогите найти ошибку при применении template.
Igor_U
сообщение Jun 9 2006, 06:10
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 2-10-05
Пользователь №: 9 141



Не понимаю. Где может быть ошибка при использовании template? Без использования template проект собирается нормально. Проект состоит из 3 фалов main.cpp - откуда вызываю функцию Func, clMy.h - где объявляю класс clMy, и clMy.cpp - где описана реализация функции Func. Вот как это выглядит:
main.cpp
Код
#include <avr/io.h>
#include "clMy.h"

int main(void)
{
clMy My;
volatile uint8_t d=My.Func(3);
for(;;);
return (0);
};

clMy.h
Код
#include <avr/io.h>
#ifndef _clMy_
#define _clMy_

class clMy
{
private:
    uint8_t massiv[count];
public:
    uint8_t Func(uint8_t);
};

#endif

clMy.cpp
Код
#include "clMy.h"

uint8_t clMy::Func(uint8_t temp)
{
return(massiv[temp]);
}


Это все собирается правильно. Но как только хочу использовать template проект собираться перестает. Линковщик ругается, что не определена ссылка на Func. Видимо что-то неправильно делаю, но что? С плюсами еще только знакомлюсь. Помогите.
main.cpp
Код
#include <avr/io.h>
#include "clMy.h"

int main(void)
{
clMy<4> My;
volatile uint8_t d=My.Func(3);
for(;;);
return (0);
};

clMy.h
Код
#include <avr/io.h>
#ifndef _clMy_
#define _clMy_

template <uint8_t count>class clMy
{
private:
    uint8_t massiv[count];
public:
    uint8_t Func(uint8_t);
};

#endif

clMy.cpp
Код
#include "clMy.h"

template <uint8_t count>uint8_t clMy<count>::Func(uint8_t temp)
{
return(massiv[temp]);
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Jun 9 2006, 06:52
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Насколько я помню шаблоны, в объявлении, в <> указыватся некий абстракный тип T,
Код

template <T> class Storage{
T array[5];
}

а в тексте этот тип подменяется на один из существующих типов,
и соответсвеено генерится код с использованием этого типа:
Код

{
...
Storage<int> intStorage
Storage<myClass> classStorage;
...
}

таким образом создаются массивы из разных типов данных.
Тут как я вижу
clMy<4> My;
Для какого типа создается объект? И если известного, тогда зачем шаблон?
Цель шаблона использовать одинаковый алгоритм для разных типов данных, будет создано столько функций сколько типов будет заданно в качестве параметра. В данном случае код для функции просто не генерится.
Извините, если что-то не понял в коде и неправильно истолковал.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016