| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > [C++] Инициализация класса матрицы |
| Автор: JackYF 29.11.2007, 18:45 | ||||||||||
| Итак, реализуется свой велосипедный класс "матрица" для сдачи лабы. Вопрос в следующем: я хочу, чтобы матрица умела инициализироваться двумерным заданным массивом наподобие:
Класс шаблонный, единственный параметр шаблона - тип. Конструктор
справедливо не срабатывает, так как int[2][3] не приводится к int**, у него другая физ. структура. Возможные видимые мной выходы: 1. cделать конструктор
К нему обращаться через
2. Сделать конструктор шаблонным, типа
Первый вариант - не очень красиво и потенциально опасно, второй вариант - может быть сгенерировано многовато функций для каждой из используемых в клиентском коде матриц, по одной для каждого числа столбцов. Кто какой вариант предпочёл бы? Или предложите свой. |
| Автор: JackYF 29.11.2007, 19:32 | ||||
Эээ... не понял, объясни, в чём ляп. Ну, в идеальном случае так:
Добавлено через 2 минуты и 38 секунд Жду. Только вот лабу через 2 недели сдавать |
| Автор: archimed7592 29.11.2007, 19:50 | ||
Видишь ли, в языке С++ так массивы делают |
| Автор: JackYF 29.11.2007, 20:07 |
archimed7592, ты чего? у меня два измерения - строки, столбцы. Где массив матриц-то? |
| Автор: archimed7592 29.11.2007, 20:25 |
| Ытить... Посыпаю голову пеплом. Спать уже пора Второй. Во-первых, с вероятностью 80% эти ф-ции заинлайнятся. Особенно, если весь конструктор будет представлять из себя forwarder на какой-нибудь. Во-вторых, даже если бинарник разрастётся, то ты этого не заметишь(ну что такое на сегодняшний день 100 кб?) В-третьих - это лаба |
| Автор: JackYF 29.11.2007, 20:32 | ||
Да, так и есть. Что ж, позиция ясна. Со всем согласен, поэтому пока остановлюсь тоже на варианте 2, как рабочем. Тему пока не закрываю, может, ещё кто высказаться захочет. |
| Автор: archimed7592 29.11.2007, 20:37 |
| За первый вариант вряд ли кто выскажется |
| Автор: bsa 29.11.2007, 21:51 | ||
или я что-то не понял, или у меня крутой компилятор:
|
| Автор: JackYF 29.11.2007, 22:12 |
Правильно. Это развитие второго варианта, шаблонный конструктор. Только уже с двумя параметрами |
| Автор: JackYF 29.11.2007, 22:55 | ||||||
| Так. Теперь меня удивляет компилятор... g++ 4.2.1 Здесь идут части одного .hpp-файла, который инклюдится в один .cpp Сначала часть-"заголовок":
Затем один из методов:
Ругается компилятор так:
Без этого самого метода всё чики-пики. Вопрос - почему компилятор считает, что класс неполон? |
| Автор: MAKCim 29.11.2007, 23:05 | ||
|
| Автор: bsa 29.11.2007, 23:09 | ||||
А если
|
| Автор: JackYF 29.11.2007, 23:10 | ||||||||
| MAKCim, да, было такое подозрение. На это компилятор говорит, что
И пока не поменяешь обратно порядок template'ов, говорит о несоответствии прототипов. Добавлено через 1 минуту и 41 секунду bsa, аналогично с вариантом MAKCimа. На прототипы начинает ругаться. Добавлено через 2 минуты и 38 секунд Вариант
На прототипы не ругается, но выдаёт ошибку про "imcomplete type". Добавлено через 8 минут и 18 секунд Сужаем ошибку. За основу взял пример bsa:
Итого имеем то же самое. |
| Автор: bsa 29.11.2007, 23:44 |
| попробуй определить конструктор в теле класса. Если, конечно, на принцип не пошел... |
| Автор: JackYF 30.11.2007, 00:17 | ||||
| Буквально сейчас об этом подумал. Как воркэраунд попробую сделать. ... Блин, что за ёлки... опять ему что-то не так:
Ругается на строчку №27 так:
Я же в функции ему передаю два size_t... |
| Автор: archimed7592 30.11.2007, 00:20 | ||
JackYF, йа колдун:
|
| Автор: JackYF 30.11.2007, 00:24 |
| Поломали они, что ли, это со времён 3-й мажорной версии?... тьху... |
| Автор: archimed7592 30.11.2007, 00:24 |
| Тебе "<unresolved overloaded function type>" ни о чём не говорит? |
| Автор: JackYF 30.11.2007, 00:25 | ||
не-а. Я делаю _ctor(rows, columns), где rows типа size_t, columns типа size_t. void _ctor(size_t, size_t); - функция есть. |
| Автор: archimed7592 30.11.2007, 00:28 |
| Дай полный код, который по идее должен быть компилябельным. |
| Автор: bsa 30.11.2007, 00:34 |
| попробуй для начала еще size_t в template заменить на unsigned long. |
| Автор: JackYF 30.11.2007, 00:41 | ||||
| Сложно... просто у меня исходники друг на друга завязаны, типа библиотека. Отвязывать один исходник от библиотеки - гиблая задача. В общем, выкладываю весь tar.gz "библиотеки". Исходник теста:
Путь к библиотеке распакованной только надо будет прописать. Собирать по идее не потребуется. Но если что - там lib/configure, lib/Makefile... Пропиши этому чуду только -DYF_CODE_32... при сборке... и [WINDOWS|LINUX]... Да. надо бы привести это к виду нормальному... Спать... спать... Добавлено @ 00:42 И почему это я не могу аттачить tar.gz... Добавлено через 3 минуты и 10 секунд
Попробовал. К сожалению, ноль эффекта. Добавлено через 6 минут и 51 секунду Ушёл спать... всем большое спасибо за участие. Авось на свежую голову что-то надумается, завтра продолжу. |
| Автор: archimed7592 30.11.2007, 01:01 | ||
JackYF, шаман хренов
С переименованными параметрами собирается на ура |
| Автор: JackYF 30.11.2007, 15:17 |
| Чертить многополосные флагштоки! М-да-а... ты таки собирал моё чудо? |
| Автор: archimed7592 30.11.2007, 17:17 |
угу - g++ ./main.cpp Правда, пришлось немного пофиксить твои "кроссплатформенные" workaround'ы |
| Автор: JackYF 30.11.2007, 20:11 | ||
Не подскажешь, которые? |
| Автор: archimed7592 30.11.2007, 20:13 |
| Точно помню, что ругалось на 0xFFFFFFFFFFFFFFFF(max uint 64), а чего ещё, ес честно не помню - спать хотелось и нажимал ctrl+y на автомате |
| Автор: JackYF 30.11.2007, 21:59 | ||
учтём. ага, тоже в mcedit'е работаешь? Добавлено через 23 секунды Кстати, проблема-то решилась, наконец можно тему пометить как решённую. |
| Автор: archimed7592 30.11.2007, 22:16 |
Вообще, работаю в EmEditor'е(кстати советую, как тупой редактор с примитивной подсветкой), а твоё правилось в FAR'е Добавлено через 57 секунд Всмысле редактор умный, но как IDE не катит |