Ничего не могу понять. В чем ошибка?
На Си давно уже ничего не писал.
Помогите пожалуйста.
Выдает:
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" );
}
От:
_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>
Запихни реализацию конструктора в ашник и натсупит счастье.
Здравствуйте, 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
Здравствуйте, 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
Я — свихнувшееся сознание Джо.
Здравствуйте, sdmitry, Вы писали:
S>Ничего не могу понять. В чем ошибка?
S>На Си давно уже ничего не писал.
S>Помогите пожалуйста.
Unresolved External SymbolАвтор: Tom Дата: 18.06.04
Невозможное мы сделаем сегодня — чудо займет немного больше времени. /Аноним/
Re[2]: не пойму c template
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
VV>Вообче-то неплохо бы еще и inline подписать, а то может быть наоборот — слишком много определений одного метода...
В данном случае ODR не нарушен.
Of course, the code must be complete enough to compile and link .
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить