Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблон: ошибка линкера 
V
    Опции темы
nerezus
  Дата 25.6.2008, 14:44 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Код

Error    1    error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl toString<int>(int)" (??$toString@H@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) referenced in function "public: __thiscall Actor::Actor(float,float,unsigned long)" (??0Actor@@QAE@MMK@Z)    Actor.obj    HgeArkanoid



У меня используется в коде:
Код

toString(width)


Оно описано в common.h
Код

template <typename T> string toString(T val);


и реализовано в common.cpp
Код

template <typename T> string toString(T val)
{
    ostringstream o;
    static string s;
    if (!(o << val))
        throw "Cannot convert to string";
    s = o.str();
    return s;
}


В чем ошибка?

Это сообщение отредактировал(а) nerezus - 25.6.2008, 14:47


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Fazil6
Дата 25.6.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(nerezus @  25.6.2008,  14:44 Найти цитируемый пост)
В чем ошибка? 

в том, что описано и реализовано в разных файлах. 
PM MAIL   Вверх
nerezus
  Дата 25.6.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Fazil6, а как надо?
Откуда такое требование и как его обойти?

Естественно я его из разных файлов вызываю, поэтому заголовок и выделил в отдельный, чтобы ошибки не было, что одинаковые ф-ии объявлены.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
georain
Дата 25.6.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Вот на следующей странице этого раздела (используем поиск):
http://forum.vingrad.ru/forum/topic-214819.html
PM MAIL   Вверх
nerezus
  Дата 25.6.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



круто) fixed, but...

Если не ошибаюсь, это одна из ошибок именно компилятора, а не прописанная в стандарте фича?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Fazil6
Дата 25.6.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(nerezus @  25.6.2008,  14:58 Найти цитируемый пост)
Если не ошибаюсь, это одна из ошибок именно компилятора, а не прописанная в стандарте фича? 

ошибаешься
PM MAIL   Вверх
bsa
Дата 25.6.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(nerezus @ 25.6.2008,  14:58)
Если не ошибаюсь, это одна из ошибок именно компилятора, а не прописанная в стандарте фича?

Именно что прописанная. Чтобы можно было разделять объявление и реализацию шаблонов был придуман механизм extern template. Но большинство компиляторов его не поддерживают. Хотя, в любом случае, твой код без изменений компилироваться бы не стал.
PM   Вверх
nerezus
Дата 25.6.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



bsa, а как его заюзать? )
VS, моследняя версия.
Так сказать мейнстрим под винду.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
bsa
Дата 25.6.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(nerezus @ 25.6.2008,  16:22)
bsa, а как его заюзать? )
VS, моследняя версия.
Так сказать мейнстрим под винду.

То что мейнстрим, еще ничего не значит. Она даже стандарт C99 не поддерживает.
Кто-то сказал, что данную возможность поддерживает компилятор от Sun.
PM   Вверх
JackYF
Дата 25.6.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Данную возможность поддерживает Comeau smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
bsa
Дата 25.6.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(JackYF @ 25.6.2008,  21:48)
Данную возможность поддерживает Comeau smile

Очень хорошо. И цена хорошая. Вот только есть одна проблема - платить никто ее не захочет. А бесплатно попробовать нельзя (online неполноценнен, так как тот же буст даже не собрать).
PM   Вверх
comcon1
Дата 26.6.2008, 06:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Да нафиг это нужно? Если бы у тебя был какой-нить мегапроект на миллион строк... Уж как-то люди обходятся и даже по этому поводу не парятся и нормальные кроскомпилерные библотеки пишут.

Конечную реализацию можно отделять в отдельный файл, но не всегда можно так код выстроить. В том примере, что ты привёл, вообще смешно про это говорить. А чтобы ошибки не было, достаточно весь хедер занести в #ifndef #endif -блок. 


--------------------
PM MAIL   Вверх
JackYF
Дата 26.6.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



bsa, не спорю smile

Цитата(comcon1 @  26.6.2008,  05:59 Найти цитируемый пост)
Да нафиг это нужно?

Не скажи... Я вот очень был бы рад.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
bsa
Дата 26.6.2008, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(comcon1 @ 26.6.2008,  06:59)
Да нафиг это нужно? Если бы у тебя был какой-нить мегапроект на миллион строк... Уж как-то люди обходятся и даже по этому поводу не парятся и нормальные кроскомпилерные библотеки пишут.

Это, думаю, сильно ускорит компиляцию. Когда у тебя, допустим, STL и тот же boost активно используются в программе, то скорость компиляции одного файла довольно низкая. Ситуацию спасает прекомпиляция заголовочных файлов, но ее еще надо настраивать в проекте, причем automake, например, на данный момент этого сделать легко не позволяет.
PM   Вверх
UnrealMan
Дата 26.6.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(comcon1 @  26.6.2008,  06:59 Найти цитируемый пост)
Да нафиг это нужно?

Поддерживаю. От export-а больше проблем, чем пользы.

Добавлено @ 16:38
Цитата(bsa @  26.6.2008,  16:21 Найти цитируемый пост)
Это, думаю, сильно ускорит компиляцию.

А возможно, что и, наоборот, затормозит её. Ведь исходные файлы с экспортируемыми шаблонами становятся зависимы друг от друга (а не только от заголовочных файлов).

Это сообщение отредактировал(а) UnrealMan - 26.6.2008, 16:42
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0748 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.