19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
|
||||||
1 | ||||||
Виртуальный деструктор на MinGW v4.9.213.07.2016, 19:07. Показов 1247. Ответов 10
Метки нет (Все метки)
не знаю как на прошлых версиях, но на этой не работает чисто виртуальный деструктор. проверялось самым обычным тестом
в vs все работает. может где-то подкрутить нужно?
0
|
13.07.2016, 19:07 | |
Ответы с готовыми решениями:
10
Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B Виртуальный деструктор виртуальный деструктор Виртуальный деструктор и уничтожение объектов |
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
13.07.2016, 19:09 | 2 |
Хрисипп, а ключевое слово
virtual написать?
0
|
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
|
|
13.07.2016, 19:10 [ТС] | 3 |
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
13.07.2016, 19:17 | 4 |
Это ошибка линкера. Если определение деструктора находится в заголовочном файле, который подключается в несколько единиц трансляции, то ошибка справедливая. MinGW здесь абсолютно прав, что это не компилирует.
Либо вынеси определение в отдельную единицу трансляции, либо сделай его inline .
0
|
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
|
|||||||||||
13.07.2016, 19:37 [ТС] | 5 | ||||||||||
да, работает если занести в мейн, но он подключается к другому хедеру, который в свою очередь к мейну
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
13.07.2016, 19:45 | 6 |
Хрисипп, поясни как ты понимаешь назначение строки номер 2 в h1? Почему он у тебя не под include-guard'ом?
Добавлено через 5 минут Да, но у тебя проблема похоже из-за невнесенного в include-guard подключения. В итоге содержимое "расплодилось". И если объявлений в программе может быть сколько угодно, то определение сущности должно быть одно (правило одного определения). Как ни крути - программа остается некорректной, даже если VS ее каким-то чудом собирает. Следовательно в любом случае - оставлять определение не-inline функции в заголовочном файле не стоит.
0
|
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
|
||||||
13.07.2016, 19:48 [ТС] | 7 | |||||
DrOffset,
опять ошибся при написании ответа. там
тогда бы он сообщил, что deep include (это имеешь в виду?)
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
13.07.2016, 19:53 | 8 |
Сообщение было отмечено DrOffset как решение
Решение
Хрисипп, ответ я тебе дал.
* В заголовочных файлах все содержимое должно быть в обрамлено include-guard`ом. * В заголовочных файлах определений нешаблонных и не-inline функций быть не должно. Собственно все. Добавлено через 3 минуты Не факт. Зависит от того есть ли циклическое включение. У тебя его нет, насколько ты смог показать.
1
|
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
|
|
13.07.2016, 20:09 [ТС] | 9 |
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
13.07.2016, 20:22 | 10 |
Оно. Но оно разрывается include-guard`в h2.
Я же сказал тебе как делать правильно, в чем проблема-то? Зачем, кстати, вообще нужно циклически включать? Это в любом случае нехорошо.
0
|
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
|
|
13.07.2016, 20:39 [ТС] | 11 |
осталось со времени, когда разбирался как устроены эти ifdef'ы. этот проект так и остался для сравнения с vs
0
|
13.07.2016, 20:39 | |
13.07.2016, 20:39 | |
Помогаю со студенческими работами здесь
11
Виртуальный деструктор, для чего нужен? Вопрос новичка про виртуальный деструктор Виртуальный деструктор вызывается два раза Почему виртуальный деструктор вызывается дважды? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |