Re: Managed C++ template in VS 2008
От: Bell Россия  
Дата: 12.11.08 09:42
Оценка: 2 (1)
Здравствуйте, Smartcat, Вы писали:

S>Не могу скомпилировать простой пример в VS 2008 (Console CLR Application.) постоянно выдает ошибки типа:



S>Но вот когда пишешь реализацию конструктора и деструктора в *.h файле, а остальные методы — в *.cpp, то все компилируется нормально. Без каких — либо ошибок линкера.


Попробуй вызвать эти методы.

S>Подскажите в чем проблема. Неужели необходимо определять конструктор и деструктор шаблона в файле хидера?

И все остальные функции тоже.

S>И никаких путей нет, чтобы определение конструктора и деструктора вынести из *.h файла в *.cpp?

Есть, называется "экспорт шаблонов". Поддерживается далеко не всеми компиляторами, многими рассматривается как бесполезная фича.

Эта тема обсуждается постоянно — воспользуйся поиском.
Любите книгу — источник знаний (с) М.Горький
Managed C++ template in VS 2008
От: Smartcat Беларусь  
Дата: 12.11.08 09:36
Оценка:
Не могу скомпилировать простой пример в VS 2008 (Console CLR Application.) постоянно выдает ошибки типа:

Error 1 error LNK2020: unresolved token (06000018) Description<int>::.ctor ConsoleCLR.obj ConsoleCLR
Error 2 error LNK2020: unresolved token (06000019) Description<int>::~Description<int> ConsoleCLR.obj ConsoleCLR

Код примера таков:

//--------------------------------
//Template.h
//--------------------------------

template <class TypeOfValue>
public ref class Description{
public:
    Description();
    Description(TypeOfValue type);
    ~Description();
    void Show();
    String ^ Message;
    TypeOfValue Value;
};


//--------------------------------
//Template.cpp
//--------------------------------
#include "Template.h"

template <class TypeOfValue>
Description<TypeOfValue>::Description(){
}

template <class TypeOfValue>
Description<TypeOfValue>::~Description(){
}

template <class TypeOfValue>
void Description<TypeOfValue>::Show(){
    Console::WriteLine(L"{0}: {1}", Message, Value);
}


Но вот когда пишешь реализацию конструктора и деструктора в *.h файле, а остальные методы — в *.cpp, то все компилируется нормально. Без каких — либо ошибок линкера.

Подскажите в чем проблема. Неужели необходимо определять конструктор и деструктор шаблона в файле хидера? И никаких путей нет, чтобы определение конструктора и деструктора вынести из *.h файла в *.cpp?
Re[2]: Managed C++ template in VS 2008
От: Smartcat Беларусь  
Дата: 12.11.08 09:56
Оценка:
Здравствуйте, Bell, Вы писали:

S>>И никаких путей нет, чтобы определение конструктора и деструктора вынести из *.h файла в *.cpp?

B>Есть, называется "экспорт шаблонов". Поддерживается далеко не всеми компиляторами, многими рассматривается как бесполезная фича.
Спасибо за ключевые слова для поиска.

B>Эта тема обсуждается постоянно — воспользуйся поиском.

Надо будет чаще сюда заходить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.