30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
||||||
1 | ||||||
Шаблон: Метод text() не определен для объекта класса TreeWidget28.05.2015, 11:27. Показов 739. Ответов 11
Метки нет (Все метки)
Есть код:
Значения, как написано в ошибке компилятора, переменных type и T известны. Они равны у меня 0 и TreeWidget соответственно. Вопрос: какого хрена тогда он просматривает все ветки if-else и пишет ошибку, мол метод text() не определен для объекта класса TreeWidget, если должен был посмотреть только равенство в операторе if (которое выполняется, т.к. 0 = 0) и на этом успокоится?
0
|
28.05.2015, 11:27 | |
Ответы с готовыми решениями:
11
При возврате объекта из функции пишет, что для объекта не определен констуктор копирования Передача функции указателя на метод класса и его объекта для вызова Метод для произвольного объекта класса Как создать метод с использованием объекта другого метода, который определен в другом классе |
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|
28.05.2015, 12:00 [ТС] | 3 |
В моем случае правильный, который в if стоит. Код и не нужно выполнять. Достаточно сравнить константы. Почему он не сравнивает их?
Как сделать, чтобы работало?
0
|
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
|
|
28.05.2015, 12:04 | 4 |
Компилятору без разницы в if или в else, он везде проверяет, если такого метода в классе нет - выдаст ошибку.
Добавлено через 1 минуту А вот этого компилятор не делает, это к правильности кода, на этапе компиляции, не относится, компилятор другие вещи проверяет, в частности, правильность вызовов методов.
0
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|||||||||||
28.05.2015, 12:08 [ТС] | 5 | ||||||||||
Хорошо, как сделать так, что если класс T - это TreeWidget, то выполнять код:
0
|
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
|
|
28.05.2015, 12:09 | 6 |
Сделать спецификацию шаблона
0
|
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
|
||||||
28.05.2015, 12:11 | 7 | |||||
Объявите еще один шаблон, где явно пропишите типы:
0
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|
28.05.2015, 12:12 [ТС] | 8 |
Т.е. явно руками написать определения функций, хотя это должен сделать компилятор? Тогда вопрос: а зачем нужны шаблоны?
0
|
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
|
|
28.05.2015, 12:24 | 9 |
Да. Предполагается, что у вас код разбит на небольшие функции, и части алгоритма, специфичные для разных аргументов шаблона, можно вынести в отдельную функцию.
Для обобщённого программирования. Например, для обобщённых контейнеров, которые есть в стандартной библиотеке и т.д.
0
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
||||||||||||||||
28.05.2015, 12:55 [ТС] | 10 | |||||||||||||||
Ясно, печально. Видимо разработчикам всяких компиляторов и языков неимоверно тяжело устранить очевидные недостатки...
Добавлено через 23 минуты Я не понял, а компилятор хоть это оптимизирует:
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
28.05.2015, 13:00 | 11 | |||||
специализацию.
Шаблоны подразумевают, что код одинаковый, а разнятся только типы.
В твоем же примере строки 6,7 задуманы как взаимоисключающие. Т.е. они не могут быть скомпилированы для типа, который не будет поддерживать одновременно и size(), и text(). Чтобы не переписывать весь шаблон, можно заменить всего лишь упомянутые 6,7 строки на новую шаблонную функцию со специализацией:
1
|
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
|
|
28.05.2015, 13:18 | 12 |
По идее да, но необязан. По крайней мере, g++ 4.8.4 даже с выключенной оптимизацией, для разных аргументов шаблона порождает две функции, в каждой из которых присутствует только одна ветка.
0
|
28.05.2015, 13:18 | |
28.05.2015, 13:18 | |
Помогаю со студенческими работами здесь
12
Как заставить вызвать метод класса-родителя для объекта (полиморфизм) Как в классе А у объекта класса B вызвать метод класса B ? Как в классе А у объекта класса B вызвать метод класса B ? Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |