![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Andrej23 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 3.11.2006 Репутация: нет Всего: нет |
Доброго времени суток.
Собственно такая вот загвоздка вышла: Пытаюсь сделать шаблон. Шаблон сам нормально компилируется, но при его вызове vs2005 выдает ошибку: error C2597: illegal reference to non-static member 'Indicators::Regr' Шаблон объявил так:
Вызываю его так:
компилятор на вызов шаблона ругается т.к. Indicators::Regr - это массив из 20 элементов double, хотя и даю адрес конкретной ячейки массива (типа double). собственно при вызове используются массивы с элементами типа класс. Сама структура:
Как правильно изменить объявление ф-ии чтобы можно было задавать параметром элемент массива (чтобы можно было сказать &Indicators::Regr[0] )? Это сообщение отредактировал(а) Andrej23 - 28.10.2010, 16:36 |
||||||
|
|||||||
Andrej23 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 3.11.2006 Репутация: нет Всего: нет |
В принципе вызвал шаблон, считающий значение Indicators::Regr[0] прямо из шаблона StdDevRegTempl , но остался общий вопрос - как можно сделать вызов значения напрямую, без промежуточного расчета чтобы сделать шаблон StdDevRegTempl еще более общим.
Попробовал сделать кол-во элементов массива константой, не помогло:
Всё равно пишет, что illegal reference to non-static member 'Indicators::Regr' Это сообщение отредактировал(а) Andrej23 - 28.10.2010, 17:22 |
|||
|
||||
rudvil |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 2 Всего: 3 |
Компилятор же пишет, что "так" использовать не-статические члены класса нельзя, соответственно нужно объявить их статическими.
--------------------
xor |
|||
|
||||
Andrej23 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 3.11.2006 Репутация: нет Всего: нет |
У меня массив Instr.i[] с объектами этого класса. Если сделать члены класса статическими, то получится по одному экземпляру массива-члена класса на весь массив объектов этого класса.
Похоже пока что просто оставлю расчет с вызовом шаблона изнутри другого шаблона. Работает медленнее, но работает. А как перейду на с++, тогда по-другому попробую (несколько веток назад подсказали 2 варианта, возможно во втором варианте такой фокус пройдет). Это сообщение отредактировал(а) Andrej23 - 29.10.2010, 15:41 |
|||
|
||||
Master01 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 22.8.2007 Репутация: 2 Всего: 2 |
Очень маловероятно, что такой код вообще будет работать, поскольку все параметры шаблона должны быть известны в момент компиляции! А тут у вас передаётся адрес поля &Tick::Price и &Indicators::Regr[0] которые на этапе компиляции никак известны быть не могут. |
|||
|
||||
Andrej23 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 3.11.2006 Репутация: нет Всего: нет |
Проблемы возникают только с адресом ячейки массива-члена класса. С членом класса Price никаких проблем не было. Вот в этой ветке мне дали 2 примера, первый у меня отлично работает: http://forum.vingrad.ru/forum/topic-313153...1%81%D0%B0.html |
|||
|
||||
Master01 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 22.8.2007 Репутация: 2 Всего: 2 |
угу, признаю был не прав. Я просто вообще не в курсе был про ссылки на члены-данные класса ....
Я тут почитал Страуструпа ![]()
равносильно
Так что можно, например, написать какой-то темплейт который будет автоматом разворачиваться в нечто подобное, а потом брать ссылку на этот самый addr и кастить через reinterpret_cast .... да простят меня великии за такое ![]() Но это ужасно! и так делать не надо ![]() Вообщем, я бы предложил вам лучше передавать ссылки не на сами членны-данные класса, а на некоторый метод класса, который их возвращает? Гибкость таже (и даже больше, так как метод может предварительно эти данные обработать ещё), но с другой стороны, придётся писать такие методы конечно... Вот код, для примера (немного переработанный оригинальный код djamshud-а, взятый по той линке, что вы мне дали)
Спасибо за инфу про ссылки на члены-данные класса ![]() |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |