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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ составить програму,удаляющую в даной строке каждый символ с четным номером http://www.cyberforum.ru/cpp-beginners/thread30926.html
составить програму,удаляющую в даной строке каждый символ с четным номером.
C++ Составить программу подсчета количества цифр в данной строке составит програму подсчета количества цыфр в данной строке. http://www.cyberforum.ru/cpp-beginners/thread30925.html
В борланде: работает но выдает Warning. C++
Доброе время суток. Во время компеляций программы вылетает следующее: "Warning name.cpp 218: 'turn' is assigned a value that is never used". В целом все запускаеться и работает, но любопытство взяло верх... ...хотелось бы знать что это за гадость такая, на что она может влиять, и как от нее можно избывиться?
Какая книга по программированию обьясняет все с математикой и подробно излагает все темы?По программированию? C++
Не Бьерн Страуструп?А то не нравится мне у Лафоре тип изложения книги,довольно не в мою логику там упирается,да и нравится перестал,уж больно замудренные обьяснения,без описание математической модели той или иной задачи!Например что существуют алгоритмы сортировки я тут узнал,и как можно подробно использовать массивы и где что как там фигово написано,может у меня корявые руки или что то другое,не...
C++ Найти наибольшое число из индексов массива http://www.cyberforum.ru/cpp-beginners/thread30879.html
#include <iostream> using namespace std; const int MAX=10; int maxint(int sales); int main() { int sales; int j; cout<<"Vvedite 4isla="; for(int j=0;j<MAX;j++)
C++ Строки С++ Проверить или есть указанная строка правильной записью тэгу <META> языки HTML Help подробнее

Показать сообщение отдельно
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 <>.

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