не пойму c template
От: sdmitry Украина http://shkilsoft.cjb.net
Дата: 29.06.04 16:26
Оценка: :)
Ничего не могу понять. В чем ошибка?
На Си давно уже ничего не писал.
Помогите пожалуйста.

Выдает:
main.obj : error LNK2001: unresolved external symbol "public: __thiscall CPArray<char,2>::CPArray<char,2>(void)" (??0?$CPArray@D$01@@QAE@XZ)



=== main.cpp =============

#include "my.h"

void main()
{
    CPArray<char,2> lst;
};


=== my.h ================

#ifndef _MY_H_
#define _MY_H_

template <class T, int i> class CPArray
{
public:
    CPArray();
private:
};

#endif



=== my.cpp ==============

#include "my.h"

template <class T, int i> 
CPArray< T, i >::CPArray()
{
    TRACE( "TempClass created.\n" );
}
Re: не пойму c template
От: _AK_ Россия  
Дата: 29.06.04 16:31
Оценка:
Здравствуйте, sdmitry, Вы писали:

S>Ничего не могу понять. В чем ошибка?

S>На Си давно уже ничего не писал.
S>Помогите пожалуйста.

S>Выдает:

S>main.obj : error LNK2001: unresolved external symbol "public: __thiscall CPArray<char,2>::CPArray<char,2>(void)" (??0?$CPArray@D$01@@QAE@XZ)



S>=== main.cpp =============


S>
S>#include "my.h"

S>void main()
S>{
S>    CPArray<char,2> lst;
S>};
S>


S>=== my.h ================


S>
S>#ifndef _MY_H_
S>#define _MY_H_

S>template <class T, int i> class CPArray
S>{
S>public:
S>    CPArray();
S>private:
S>};

S>#endif
S>



S>=== my.cpp ==============


S>
S>#include "my.h"

S>template <class T, int i> 
S>CPArray< T, i >::CPArray()
S>{
S>    TRACE( "TempClass created.\n" );
S>}
S>



Запихни реализацию конструктора в ашник и натсупит счастье.
Re: не пойму c template
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 29.06.04 16:31
Оценка:
Здравствуйте, sdmitry, Вы писали:

S>Ничего не могу понять. В чем ошибка?

S>На Си давно уже ничего не писал.
S>Помогите пожалуйста.

S>Выдает:

S>main.obj : error LNK2001: unresolved external symbol "public: __thiscall CPArray<char,2>::CPArray<char,2>(void)" (??0?$CPArray@D$01@@QAE@XZ)



S>=== main.cpp =============


S>
S>#include "my.h"

S>void main()
S>{
S>    CPArray<char,2> lst;
S>};
S>


S>=== my.h ================


S>
S>#ifndef _MY_H_
S>#define _MY_H_

S>template <class T, int i> class CPArray
S>{
S>public:
S>    CPArray();
S>private:
S>};

S>#endif
S>



S>=== my.cpp ==============


S>
S>#include "my.h"

S>template <class T, int i> 
S>CPArray< T, i >::CPArray()
S>{
S>    TRACE( "TempClass created.\n" );
S>}
S>


Щаз кого-то будут убивать .

[ccode]
#ifndef _MY_H_
#define _MY_H_

template <class T, int i> class CPArray
{
public:
    CPArray();
private:
};

template <class T, int i> 
CPArray< T, i >::CPArray()
{
    TRACE( "TempClass created.\n" );
}
HgLab: Mercurial Server and Repository Management for Windows
Re: не пойму c template
От: Sergey J. A. Беларусь  
Дата: 29.06.04 16:32
Оценка:
Здравствуйте, sdmitry, Вы писали:

S>Ничего не могу понять. В чем ошибка?

S>На Си давно уже ничего не писал.
S>Помогите пожалуйста.

S>Выдает:

S>main.obj : error LNK2001: unresolved external symbol "public: __thiscall CPArray<char,2>::CPArray<char,2>(void)" (??0?$CPArray@D$01@@QAE@XZ)

Тело ф-ии CPArray<char,2>::CPArray<char,2>(void) и не было найдено. Либо положить тело ф-ии в хидер, либо использовать слово export (впрочем почти нигде не поддерживается). Можно ещё экспортировать инстанцированый шаблон, но точно не помню как. Что-то вроде
template CPArray<char,2>;
в my.cpp
Я — свихнувшееся сознание Джо.
Re: не пойму c template
От: unrealalex Россия  
Дата: 29.06.04 16:32
Оценка:
Здравствуйте, sdmitry, Вы писали:

S>Ничего не могу понять. В чем ошибка?

S>На Си давно уже ничего не писал.
S>Помогите пожалуйста.

Unresolved External Symbol
Автор: Tom
Дата: 18.06.04
Невозможное мы сделаем сегодня — чудо займет немного больше времени. /Аноним/
Re[2]: не пойму c template
От: Lorenzo_LAMAS  
Дата: 30.06.04 06:35
Оценка:
SJA>Можно ещё экспортировать инстанцированый шаблон, но точно не помню как. Что-то вроде
SJA>template CPArray<char,2>;
SJA>в my.cpp

Можно сделать следующее :

1. Объявить в заголовке явную специализацию конструктора, а определить где-то в файле реализации cpp.
//h.h
template<class>
class CPArray
{
public:
   CPArray();
};

template<> CPArray<int>::CPArray();
//t.cpp
#include "h.h"

template<class T>
CPArray<T>::CPArray(){}
template<>
CPArray<int>::CPArray()
{
}


C таким вариантом проблемы — насколько я помню 6 и 7 вижуалы такое не компилят либо програма работает неправильно.


2.Где-то в файле реализации, где будет видно определение, написать явное инстанцирование:

класс:
//h.h
template<class, int>
class CPArray
{
public:
   CPArray();
};
//c.cpp
#include "h.h"
template<class T, int I>
CPArray<T, I>::CPArray(){}

template class CPArray<char, 2>;


ну или какой-то член, который ты не определил в заголовке

//h.h
template<class, int>
class CPArray
{
public:
   CPArray();
};
//c.cpp
#include "h.h"
template<class T, int I>
CPArray<T, I>::CPArray(){}

template CPArray<char, 2>::CPArray();
Of course, the code must be complete enough to compile and link.
Re[2]: не пойму c template
От: VicV  
Дата: 30.06.04 06:49
Оценка: -1
Здравствуйте, Нахлобуч, Вы писали:


Н>
Н>[ccode]
Н>#ifndef _MY_H_
Н>#define _MY_H_

Н>template <class T, int i> class CPArray
Н>{
Н>public:
Н>    CPArray();
Н>private:
Н>};

Н>template <class T, int i> 
Н>CPArray< T, i >::CPArray()
Н>{
Н>    TRACE( "TempClass created.\n" );
Н>}
Н>



Вообче-то неплохо бы еще и inline подписать, а то может быть наоборот — слишком много определений одного метода...
Re[3]: не пойму c template
От: Lorenzo_LAMAS  
Дата: 30.06.04 06:54
Оценка:
VV>Вообче-то неплохо бы еще и inline подписать, а то может быть наоборот — слишком много определений одного метода...

В данном случае ODR не нарушен.
Of course, the code must be complete enough to compile and link.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.