![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ANTON_AL |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 292 Регистрация: 27.1.2007 Репутация: нет Всего: нет |
Доброго дня.
Вот такая ситуация: В приведённом коде класс A, принимает в качестве шаблонного параметра нечто, у чего есть член Count
В результате компиляции получаю ошибку error C2244: 'A<T>::SomeMethod' : unable to match function definition to an existing declaration. У меня есть предположение, что происходит конфликт между объявлением шаблона и тем шаблонным параметром, который явно передаётся в A< > в месте, где описана реализация метода. Но как это обойти?? И в этом ли причина?? Это сообщение отредактировал(а) ANTON_AL - 17.9.2007, 16:45 |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
глянь в MSDN описание этой ошибки.
Решается просто
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
ANTON_AL,
какой компилятор? GCC 4.1.2 компилирует нормально -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
кстати помоему ты чего-то нето тут придумал
|
|||
|
||||
| ANTON_AL |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 292 Регистрация: 27.1.2007 Репутация: нет Всего: нет |
MAKCim
Я под VisualStudio. Fazil6, кстати помоему ты чего-то нето тут придумал Это необходимость. На вход нужно ожидать массив только такого размера, как в T::Count |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Fazil6,
или enum -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Судя по объявлению T::Count он только и может быть enum или static...
Хотя... еще, конечно может быть типом или методом... Только вот насчет необходимости... Что-то я сомневаюсь, что таким образом ты пресечешь попытку вызвать SomeMethod с адресом массива, где два элемента. Или 5. В общем, любым. Это все же С, не забывай. В гробу он видал размеры встроенных массивов. Тогда уж объяви встроенный тип typedef int*[T::Count] CFrames; Да и то, не уверена, что поможет. В любом случае, как-то это дурно пахнет. -------------------- ... |
|||
|
||||
| ANTON_AL |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 292 Регистрация: 27.1.2007 Репутация: нет Всего: нет |
Earnest,
как-то это дурно пахнет. Эх. . .Пахло бы очень хорошо, если б я мог пресечь ( раньше почему то думал, что мог ). Ну тогда от этой затеи придётся отказаться, а сделать просто **ppArray. Странно, а какой вообще тогда смысл в таких параметрах . . .
. . .если они не на что не влияют. Это, получается эквивалентно такому
Но всёравно от первого метода есть польза: раз уж он что то и не пресекает, зато он обеспечивает наглядность в коде, и, хотелось бы всётаки как-то оставить такое объявление. Придётся поломать голову. . . Fazil6 Решается просто Да, но, боюсь представить себе границы объявления класса Earnest, Ты, оказывается, женщина . . . Уже второе моё заблуждение за сегодня. Это сообщение отредактировал(а) ANTON_AL - 17.9.2007, 18:42 |
||||
|
|||||
| ANTON_AL |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 292 Регистрация: 27.1.2007 Репутация: нет Всего: нет |
Так просто оказалось:
|
|||
|
||||
| Skladnoy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
||||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| Skladnoy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
||||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Мне кажется, тут не стоит быть святее папы римского. В C++ при желании можно обойти любые ограничения. Главное - явно обозначить намерения. Сделать это можно хоть таким кодом (с явным указанием размера), хоть комментарием... я бы ограничилась комментарием. А в функции устроить дополнительную проверку - что память по переданному указателю не меньше предполагаемой.
-------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |