Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DrHlus
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 11
#1

Шаблонный клас и странности с его функцией - C++

02.01.2013, 19:25. Просмотров 462. Ответов 9
Метки нет (Все метки)

Здравствуйте!
Тут у меня маленькая проблемка. Вот здесь описание класа и одной из его функций
C++
1
2
3
4
5
6
7
class volume: public vector< vector< vector<_obj> > >
{
    public:    
    vector<_obj>& getColumn(CoordType x, CoordType z)
    {
        return at(x).at(z);
    }
При компиляции G++ ругается так:
Код
error: there are no arguments to ‘at’ that depend on a template parameter, so a declaration of ‘at’ must be available [-fpermissive]
Как я понимаю, если поставить флаг -fpermissive, то оно скомпилируется, но мне не очень нравится эта идея. Поэтому подскажите, пожалуйста, как это исправить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2013, 19:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонный клас и странности с его функцией (C++):

Шаблонный класс, не работает с френд функцией - C++
Переделал программу под шаблонный класс, все методы работают справно когда задаешь тип. Да вот только проблема с френд функцией. Светит...

клас Letter, клас Person - C++
Створити клас Letter, що мiстить наступнi елементи: - поле «вiдправник» Person*Sender; - поле «одержувач» Person*Receiver; - поле...

GetPixel и его странности - C++
дело такое: есть функция которая должна искать цвет в RGB на определённом пикселе (где находится курсор) выглядит она так POINT...

Найти расстояние от ближайшей точки треугольника до его стороны с функцией - C++
Нужна помощь с заданием. Условие:даны координаты вершин треугольника и точек внутри него.Найти расстояние от ближайшей точки треугольника...

Передача массива символов в функцию strlen после создания его функцией sprintf - C++
Если вводится 1 символ, выводится &quot;8&quot;, 2 символа - &quot;9&quot;. И так далее. Почему? Это нормально? Задание требует преобразование long double в...

Вводится последовательность из N целых чисел. Найти среднее арифметическое его цифр (функцией оформить определения среднего арифметического цифр числа - C++
Вводится последовательность из N целых чисел. Найти среднее арифметическое его цифр (функцией оформить определения среднего арифметического...

9
Croessmah
Эксперт CЭксперт С++
13508 / 7666 / 866
Регистрация: 27.09.2012
Сообщений: 18,852
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 20:37 #2
Собственно, что такое at? Из Вашего кода ничего не понятно.
0
nonedark2008
925 / 664 / 141
Регистрация: 28.07.2012
Сообщений: 1,806
02.01.2013, 20:49 #3

Не по теме:

at - это метод из наследуемого вектора


А так, мне тожен хочется увидеть код более обширно. По крайней мере ругается на шаблон, а шаблон наблюдается только в векторе. Или у вас есть еще что-то?

Добавлено через 1 минуту
CoordType - это кто?
0
0x10
02.01.2013, 20:50
  #4

Не по теме:

Цитата Сообщение от DrHlus Посмотреть сообщение
public vector< vector< vector<_obj> > >
Ну жесть же... Неужели не возникает желание сдеать как-нибудь попроще?

0
DrHlus
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 11
02.01.2013, 20:53  [ТС] #5
Я тут чуток код поправил - надеюсь, так понятнее.
C++
1
2
3
4
5
6
7
8
9
template<typename _obj>
class volume: public vector< vector< vector<_obj> > >
{
    public:
    vector<_obj>& getColumn(CoordType x, CoordType z)
    {
        return at(x).at(z);
    }
};
at - унаследованный метод от базового класса vector< vector< vector<_obj> > > (типа трехмерный вектор из объектов _obj)

Пока это писал, пришло еще 3 сообщения
CoordType - просто синоним для int16_t.

Шаблонный тип есть только в описании базового класса и возвращаемого значения getColumn.
Обширнее, чесно говоря, и нечего писать.

Другой альтернативы (кроме multi_array, который мне не подходит) для базового класа я не вижу
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
02.01.2013, 20:54 #6
0x10, Нормалные герои, всегда идут в обход, а вот палладины...
0
0x10
2474 / 1647 / 247
Регистрация: 24.11.2012
Сообщений: 4,068
02.01.2013, 20:59 #7
DrHlus,
C++
1
return this->at(x).at(z);
1
DrHlus
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 11
02.01.2013, 21:10  [ТС] #8
Большое спасибо 0x10
А какие пути обхода предлагает наш герой Invader_Zim?
0
0x10
2474 / 1647 / 247
Регистрация: 24.11.2012
Сообщений: 4,068
02.01.2013, 21:16 #9
Чтобы предложить адекватные обходные пути, надо, наверное, знать формулировку всей задачи. Но вообще думается, что тут можно не городить иерархию, а написать класс, в котором расположить более простую структуру (например, одномерный вектор), и для нее уже определить метод индексации.
0
DrHlus
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 11
02.01.2013, 21:20  [ТС] #10
ладно, убедили. подумаю об этом
0
02.01.2013, 21:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2013, 21:20
Привет! Вот еще темы с ответами:

матрица. клас - C++
Решил создать класс квадратных матриц. Вот что получилось. Все работает, но хотелось бы услышать Ваше мнение и любые(ВСЕ) замечания ...

Векторы+клас - C++
Добрый вечер! Помогите пожалуйста кто-нибуть в написании или обьяснении создания програмы: Создать клас vector3D, какой задаеться троицей...

клас обработчик - C++
Написать класс обработчик исключительных ситуаций. Программа ловит ошибкуделения на нуль и выводитсообщение,вв какой части программы...

клас myDate - C++
Создайте класс Date, который будет содержать информацию о дате (день, месяц, год). С помощью механизма перегрузки операторов, определите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru