|
|
||||||||||||||||
Ошибка: multiple definition of `void std::swap<A>(A&, A&)04.08.2015, 19:46. Показов 4106. Ответов 46
Метки нет (Все метки)
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:
a.h
a.cpp
main.cpp
0
|
||||||||||||||||
| 04.08.2015, 19:46 | |
|
Ответы с готовыми решениями:
46
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &)
Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? |
|
|
||||||||||||
| 05.08.2015, 14:32 | ||||||||||||
Сообщение было отмечено DiffEreD как решение
Решение
1
|
||||||||||||
|
|
|||||||
| 05.08.2015, 16:16 [ТС] | |||||||
|
Не по теме: Ну наконец то, то что я хотел Добавлено через 1 час 31 минуту Ilot, что то я не пойму тут один момент. В заголовке мы объявляем специализацию с пометкой noexcept. В исходнике пишем определение этой специализации уже без noexcept. Он, как бы там подразумеваеться по умолчанию. А то если его туда дописать, то ошибочка получаеться: a.cpp
ошибка
Добавлено через 2 минуты Типа разные спецификаторы исключений. Как так может быть - они же одинаковые.
0
|
|||||||
|
|
|||||||||||
| 05.08.2015, 17:00 | |||||||||||
|
DiffEreD, смотрите исходники компилятора:
. (С себя греха не снимаю - тоже не досмотрел...)Просто подправьте спецификацию исключений и все будет зер гут:
1
|
|||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 05.08.2015, 21:46 [ТС] | |||||||||||||||||||||||||||||||||||||||||||||||||||
|
Итак, под итожим.
Что бы добавить свою специализацию функции swap в пространство имен std для своего не шаблонного класса можно использовать три варианта: Вариант 1 (самый простой) - это добавить специализацию в оддельный заголовок: a.h
a.cpp
swap.h
main
Вариант 2 (не до конца мною понятен и под вопросом производительности) - это определить специализацию в заголовке файла класса с пометкой inline: a.h
a.cpp
main
Вариант 3 (могут возникнуть непонятные проблемы со спецификаторами исключений) - это сначала обвить в заголовке класса специализацию, а в реализации класса написать определение: a.h
a.cpp
main
Вариант 3 у меня на работе на gcc 5.1.0 32bit не компилировался из за непонятных несоответствий спецификатора исключений noexcept. Дома, на gcc 5.1.0 64bit - все работает. Завтра еще раз проверю. Буду рад услышать любые замечания.
0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
What a waste!
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
|
||
| 05.08.2015, 22:02 | ||
|
1
|
||
|
|
|||||||||||||||||||||||||||||||
| 05.08.2015, 23:18 [ТС] | |||||||||||||||||||||||||||||||
|
Замечание по варианту 3: важно чтобы операторы перемещения класса были помечены спецификатором noexcept. В противном случае надо будет добавлять спецификаторы в специализацию самому. Примерно вот так:
операторы перемещения отсутствуют или объявлены как default
a.h
a.cpp
вывод
swap<A>()
A::swap() A::swap() is noexcept: true std::swap(A, A) is noexcept: false операторы перемещения помечены как noexcept
a.h
a.cpp
вывод
swap<A>()
A::swap() A::swap() is noexcept: true std::swap(A, A) is noexcept: true Или: операторы перемещения помечены как noexcept
a.h
a.cpp
вывод
swap<A>()
A::swap() A::swap() is noexcept: true std::swap(A, A) is noexcept: true
0
|
|||||||||||||||||||||||||||||||
| 05.08.2015, 23:18 | |
|
ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? Порядок вычисления: операторы «|» и «||», «&» и «&&» Parse_matrix(std::istream& in); std::istream& in что это значит? Friend ostream& operator<<(ostream& stream, CArr& obj); Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии
Введение
Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
|
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np
class PlantAgent:
def __init__(self, name, strategy, initial_biomass):
self. name = name
self. strategy = strategy # "greedy" (широколиственные) или. . .
|