Форум программистов, компьютерный форум CyberForum.ru

Непонятные шаблоны, в библиотечку не собираются. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить функцию конкатенации (слияния) двух строк http://www.cyberforum.ru/cpp-beginners/thread30930.html
составить функцию конкатенации (слияния) двух строк.в основной програме использовать эту функцию для слияния четырех строк.
C++ составить програму,удаляющую в даной строке каждый символ с четным номером составить програму,удаляющую в даной строке каждый символ с четным номером. http://www.cyberforum.ru/cpp-beginners/thread30926.html
Составить программу подсчета количества цифр в данной строке C++
составит програму подсчета количества цыфр в данной строке.
В борланде: работает но выдает Warning. C++
Доброе время суток. Во время компеляций программы вылетает следующее: "Warning name.cpp 218: 'turn' is assigned a value that is never used". В целом все запускаеться и работает, но любопытство взяло верх... ...хотелось бы знать что это за гадость такая, на что она может влиять, и как от нее можно избывиться?
C++ Какая книга по программированию обьясняет все с математикой и подробно излагает все темы?По программированию? http://www.cyberforum.ru/cpp-beginners/thread30893.html
Не Бьерн Страуструп?А то не нравится мне у Лафоре тип изложения книги,довольно не в мою логику там упирается,да и нравится перестал,уж больно замудренные обьяснения,без описание математической модели той или иной задачи!Например что существуют алгоритмы сортировки я тут узнал,и как можно подробно использовать массивы и где что как там фигово написано,может у меня корявые руки или что то другое,не...
C++ Структура самоадресуемая Приветствую всех! Есть задача:чтение двоичного файла с зараннее известной структурой. Особенность:структура самоадресуемая(динамическое выделение памяти). Кто-нибудь сталкивался с такой проблемой?Инет по этому поводу молчит,Архангельский только выдает примеры на создание двоичного файла,а по поводу чтения неособо. //самоадресуемая структура struct TEtl { AnsiString Meropr; AnsiString... подробнее

Показать сообщение отдельно
mmasm
Сообщений: n/a
21.04.2009, 18:37
Хм... Я смотрел исходники stlport: vector.h vector.c там все по разным файлам, тут какая-то беда именно с линковкой. А проблема в том, что шаблон использоватся должен в библиотеке, которая линкуется к основному файлу... ммм.. т.е. он нужен и основной прграмме и библиотеке. Да, и просто интересно стало, как-это stl-port собрали, а тут такая фигня непонятная творится...

Смысл в том, что если объявить:
typedef struct {
..
..
} mytyp;

и сделать
vector<mytyp *> mytyp_vector;
это работает, а в моем случае не прокатывает.

а вот если в mytpl.cpp добавить строчку
Test<int *> __tmp_declaration;
то можно в программе смело делать такое объявление и все нормально слинкуется, однако для каждого и любого(темболее) типа я такое предусматривать-же не буду )

Вот оригинальная ругонь линкера
Код
------ Build started: Project: test002, Configuration: Debug Win32 ------
Linking...
main.obj : error LNK2001: unresolved external symbol "public: virtual int * __thiscall ObjectBuffer<int>::GetObjectW(void)" (?GetObjectW@?$ObjectBuffer@H@@UAEPAHXZ)
main.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __thiscall ObjectBuffer<int>::InsertAt(unsigned long,int *)" (?InsertAt@?$ObjectBuffer@H@@UAEKKPAH@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __thiscall ObjectBuffer<int>::AddObject(int *)" (?AddObject@?$ObjectBuffer@H@@UAEKPAH@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::DeleteObject(unsigned long)" (?DeleteObject@?$ObjectBuffer@H@@UAEXK@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::DeleteObject(int *)" (?DeleteObject@?$ObjectBuffer@H@@UAEXPAH@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __thiscall ObjectBuffer<int>::GetObjectIdxByAddr(int *)" (?GetObjectIdxByAddr@?$ObjectBuffer@H@@UAEKPAH@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __thiscall ObjectBuffer<int>::GetObjectIdxByID(unsigned long)" (?GetObjectIdxByID@?$ObjectBuffer@H@@UAEKK@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::MoveUp(int *)" (?MoveUp@?$ObjectBuffer@H@@UAEXPAH@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::MoveUp(unsigned long)" (?MoveUp@?$ObjectBuffer@H@@UAEXK@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::MoveDown(int *)" (?MoveDown@?$ObjectBuffer@H@@UAEXPAH@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::MoveDown(unsigned long)" (?MoveDown@?$ObjectBuffer@H@@UAEXK@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::MoveTop(int *)" (?MoveTop@?$ObjectBuffer@H@@UAEXPAH@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::MoveTop(unsigned long)" (?MoveTop@?$ObjectBuffer@H@@UAEXK@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::MoveBottom(int *)" (?MoveBottom@?$ObjectBuffer@H@@UAEXPAH@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ObjectBuffer<int>::MoveBottom(unsigned long)" (?MoveBottom@?$ObjectBuffer@H@@UAEXK@Z)
main.obj : error LNK2001: unresolved external symbol "public: virtual int * __thiscall ObjectBuffer<int>::operator[](unsigned long)" (??A?$ObjectBuffer@H@@UAEPAHK@Z)
C:\src\test002\Debug\test002.exe : fatal error LNK1120: 16 unresolved externals
Build log was saved at "file://c:\src\test002\test002\Debug\BuildLog.htm"
test002 - 17 error(s), 0 warning(s)
Добавлено через 3 минуты 55 секунд
Цитата Сообщение от oxotnik Посмотреть сообщение
Помоему компилятор не видит .cpp
===
определение и реализация шаблонов должны находится в одном месте
Хм, а как тогда такое разделение идет в stl-port к примеру?

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

Добавлено через 10 минут 49 секунд
Сорри за беспокойство, нашел ответ у С. Прата "Язык программирования Си++", если есть реализация export в компиляторе, то можно разделять определение класса и реализацию методов по разным файлам.

пр:

export template <class T> void Test<T>::Boo(T * inp) {
addr=inp;
}

Добавлено через 3 минуты 18 секунд
Жаль только в VC8 оно не работает Значит, 2 разных файла тупо сольем методом #include <>.

Всем спасибо, все понятно.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru