Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> шаблон массива с указателем в качестве параметра 
:(
    Опции темы
novice2011
Дата 29.1.2012, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Не пойму, в чем просчет. Может кто укажет на мою ошибку?


Код

#include <iostream>
#include <cstdlib>
template <class T, int *pd>
class ArrayTP
{
private:
     T ar[*pd];
public:
    ArrayTP() {};
    explicit ArrayTP(const T & v);
    virtual T & operator[](int i);
    virtual T operator[](int i) const;
};
int x = 7;
template <class T, int *pd>
ArrayTP<T,pd>::ArrayTP(const T & v)
{
    for (int i = 0; i < *pd; i++)
        ar[i] = v;
}

template <class T, int *pd>
T & ArrayTP<T, pd>::operator[](int i)
{
    if (i < 0 || i >= *pd)
    {
        std::cerr << "Error in array limits: " << i
            << " is out of range\n";
        std::exit(EXIT_FAILURE);
    }
    return ar[i];
}

template <class T, int *pd>
T ArrayTP<T, pd>::operator[](int i) const
{
    if (i < 0 || i >= *pd)
    {
        std::cerr << "Error in array limits: " << i
            << " is out of range\n";
        std::exit(EXIT_FAILURE);
    }
    return ar[i]; 
}

int main()
{    
    ArrayTP<double, &x> obj(777.7);
    int i = 0;
    for( i = 0; i < 7; i++)
        std::cout << obj[i] << ' ' << std::endl;
    return 0;
}


Компилятор выдает: 
arraytp.cpp(11): error C2057: требуется константное выражение
       
PM MAIL   Вверх
boostcoder
Дата 29.1.2012, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(novice2011 @  29.1.2012,  23:10 Найти цитируемый пост)
int x = 7;

 и
Цитата(novice2011 @  29.1.2012,  23:10 Найти цитируемый пост)
&x

 = ошибка.

параметры шаблонов должны быть известны во время компиляции.

Добавлено через 1 минуту и 5 секунд
адрес переменной, вообще-то, это значение а не тип.

что-то не очень улавливаю смысл этого шаблона %)
PM WWW   Вверх
newbee
Дата 30.1.2012, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Скорее всего никак не сделать, потому что невозможно выяснить адрес переменной во время компиляции - он меняется при перезапуске программы. Вот к чему привело дальнейшее навешивание абстракций на ассемблер.


--------------------
You're face to face
With man who sold the world
PM   Вверх
novice2011
Дата 30.1.2012, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.