forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Шаблоны (http://forum.boolean.name/showthread.php?t=15176)

impersonalis 25.07.2011 21:15

Шаблоны
 
1) Реализация template-ов должна храниться вместе с объявлением, т.е. в заголовочном файле. Файл, как положено, имеет include-guard.
2) Однако при попытке собрать программу получаю ошибку и сообщение о множественном определении шаблонных функций (номера строчек у всех реализаций совпадают, т.е. по сути дело в множественном подключении файла - но ведь см.п.1)

Что я делаю не так?

moka 25.07.2011 21:25

Ответ: Шаблоны
 
Сильно не бить, может я и чего-то не знаю (с С++ не работаю), но:
Код:

#pragma once
?

impersonalis 25.07.2011 21:34

Ответ: Шаблоны
 
её действие аналогично include-guard-у, но работает она на другом уровне. Иными словами - ситуацию не исправляет.

ffinder 25.07.2011 22:27

Ответ: Шаблоны
 
импер, конечно же телепатически мы можем тебе помочь, а чо?
ну и да, продолжай использовать странные компиляторы - на них разработка продуктивнее и всегда можно сказать что это компилятор виноват.

impersonalis 25.07.2011 22:32

Ответ: Шаблоны
 
Цитата:

импер, конечно же телепатически мы можем тебе помочь, а чо?
Вопрос теоретический, разве нет?

FDsagizi 25.07.2011 22:34

Ответ: Шаблоны
 
до конца вопрос не реал прочитать! Рекурсия!

falcon 25.07.2011 23:07

Ответ: Шаблоны
 
Цитата:

разве нет?
очевидно, что нет)

HolyDel 26.07.2011 01:06

Ответ: Шаблоны
 
кто ругается? компилятор - или линкер? если линкер - то скорее всего ошибка внутри h файла. Возможно внутри него что то определяется (а не только объявляется)

попробуй весь хидер взять в безымянное пространство имен

impersonalis 26.07.2011 01:29

Ответ: Шаблоны
 
Цитата:

Сообщение от HolyDel (Сообщение 196760)
Возможно внутри него что то определяется (а не только объявляется)

ну дак - шаблоны же. В инетах советуют не отделать их реализацию от объявления (собственно, тогда другие ошибки будут).

Цитата:

попробуй весь хидер взять в безымянное пространство имен
подетальней бы.

Завтра попытаюсь составить короткий пример

HolyDel 26.07.2011 12:12

Ответ: Шаблоны
 
Цитата:

В инетах советуют не отделать их реализацию от объявления
внутри h файла.

Цитата:

подетальней бы.
Код:

#ifndef GUARD
#define GUARD
namespace
{
...
}
#endif

внутри h файла могут объявляться какие-нибудь переменные

impersonalis 26.07.2011 13:41

Ответ: Шаблоны
 
Проблема решена. Разогнавшись, я влепил в h-файл реализацию ещё одного класса, агрегирующего исходный.


Часовой пояс GMT +4, время: 22:55.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot